OpenSSL 是一个功能强大且高度集成的开源安全工具包,可用于生成 SSL 证书,也就是我们常说的自签名证书。这类自签名证书由于缺乏权威机构的认证,仅适用于本地开发、内部测试或学习用途。如果您的网站需要长期、稳定且被广泛信任的安全保护,建议向正规的证书颁发机构(CA)申请付费的 SSL 证书,以确保用户访问时的安全性和可信度。
以下是使用 OpenSSL 生成 SSL 证书的详细步骤(包含自签名证书和 CA 签发证书两种场景):
一、生成自签名证书(测试/开发环境使用)
自签名证书不会被浏览器/系统信任,但适合本地开发或内部测试。
1. 生成私钥(RSA 2048 位)
openssl genrsa -out private.key 2048
private.key 是生成的私钥文件,需妥善保管(泄露会导致安全风险)。
2. 生成证书签名请求(CSR)
openssl req -new -key private.key -out request.csr
执行后会交互式填写信息(国家、组织、域名等),Common Name (CN) 必须与你的域名一致(如 example.com)。
3. 生成自签名证书(有效期 365 天)
openssl x509 -req -days 365 -in request.csr -signkey private.key -out certificate.crt
生成的 certificate.crt 即为自签名证书。
二、生成 CA 签发的证书(生产环境推荐)
生产环境需由受信任的 CA(如 Let's Encrypt、DigiCert)签发证书,但可先用 OpenSSL 模拟 CA 流程测试。
1. 创建私有 CA(模拟)
(1) 生成 CA 私钥
openssl genrsa -out ca.key 2048
(2) 生成 CA 根证书(有效期 10 年)
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
此证书用于签发其他证书(模拟 CA 权威)。
2. 用 CA 签发用户证书
(1) 生成服务器私钥(同步骤一)
openssl genrsa -out server.key 2048
(2) 生成服务器 CSR(同步骤一)
openssl req -new -key server.key -out server.csr
(3) 用 CA 签发证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
生成的 server.crt 即为 CA 签发的证书,需搭配 server.key 使用。
三、生成证书文件(最终使用)
自签名证书:直接使用 certificate.crt 和 private.key。
CA 签发证书:使用 server.crt + server.key,并需将 ca.crt 部署到客户端信任库(浏览器/操作系统)。
可选:合并证书链(如需)若 CA 有中间证书,需将中间证书与服务器证书合并:
cat server.crt intermediate.crt > fullchain.crt
最终使用 fullchain.crt 和 server.key。
四、Nginx/Apache 配置示例
Nginx 配置片段:
ssl_certificate /path/to/certificate.crt; # 或 fullchain.crt
ssl_certificate_key /path/to/private.key;
Apache 配置片段:
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/private.key
最后,验证证书。
openssl x509 -in certificate.crt -text -noout # 查看证书详情
openssl verify -CAfile ca.crt server.crt # 验证证书签名(CA 签发场景)
本文出处:老蒋部落 » 记录openssl生成SSL证书的过程 | 欢迎分享( 公众号:老蒋朋友圈 )