生成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可能不同,要确保正确。