生成SSL证书通常包括生成私钥、创建证书签名请求(CSR)、然后自签名或者通过CA签发。用户可能不太清楚这些步骤的区别,所以需要明确说明两种情况:自签名证书和由CA签发的证书,使用OpenSSL生成SSL证书的步骤分为自签名证书(适合测试/内部使用)和通过CA签发证书(适合生产环境)两种情况:

一、生成自签名证书(无需CA)

1. 生成私钥(private.key)

bash

复制

openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:4096

algorithm RSA: 使用RSA算法。

pkeyopt rsa_keygen_bits:4096: 密钥长度4096位(更安全)。

2. 生成自签名证书(certificate.crt)

bash

复制

openssl req -new -x509 -key private.key -out certificate.crt -days 365

x509: 生成自签名证书。

days 365: 有效期365天。

按提示填写证书信息(国家、省份、组织等)。

可选:添加-subj参数跳过交互式输入:

bash

复制

openssl req -new -x509 -key private.key -out certificate.crt -days 365 -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/CN=example.com"

3. 验证证书

bash

复制

openssl x509 -in certificate.crt -text -noout

二、生成证书签名请求(CSR)以提交给CA

1. 生成私钥(同上)

bash

复制

openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:4096

2. 生成CSR文件(certificate.csr)

bash

复制

openssl req -new -key private.key -out certificate.csr

按提示填写证书信息,确保Common Name (CN)与域名一致(如 example.com)。

可选:通过配置文件添加扩展(如subjectAltName):

创建配置文件 openssl.cnf:

ini

复制

[req]

distinguished_name = req_distinguished_name

req_extensions = v3_req

[req_distinguished_name]

countryName = Country Name (2 letter code)

stateOrProvinceName = State or Province Name

localityName = Locality Name

organizationName = Organization Name

commonName = Common Name (e.g., server FQDN)

[v3_req]

subjectAltName = @alt_names

[alt_names]

DNS.1 = example.com

DNS.2 = *.example.com

生成CSR时指定配置文件:

bash

复制

openssl req -new -key private.key -out certificate.csr -config openssl.cnf

3. 将CSR提交给CA

将certificate.csr发送给证书颁发机构(如Let's Encrypt、DigiCert等)。

CA审核后返回签发的证书(如certificate.crt)。

三、关键文件说明

私钥(.key): 保密存储,用于解密数据。

CSR(.csr): 包含证书请求信息,提交给CA。

证书(.crt或.pem): 由CA签发或自签名的公钥证书。

四、注意事项

1. 自签名证书的局限性

浏览器会标记为“不安全”,仅推荐用于测试或内部环境。

2. 生产环境建议

使用受信任的CA(如Let's Encrypt提供免费证书)。

3. 私钥安全

避免泄露私钥,服务器配置时设置权限为600。

上面就是使用OpenSSL生成SSL证书的过程,整理步骤的时候要分几点,清晰明了,先讲自签名的情况,再讲如何生成CSR提交给CA,可能用户需要的是其中一种情况,但最好都涵盖到。同时,注意命令的正确性,比如参数的大小写,比如-newkey和-newKey可能不同,要确保正确。