用户首先生成私钥:openssl genpkey 或者 genrsa,生成CSR,生成自签名证书,检查证书内容,还需要提醒用户保护私钥,不要泄露,权限设置等,使用 OpenSSL 生成 SSL 证书的具体步骤如下,分为自签名证书和通过证书签名请求(CSR)申请 CA 签发证书两种场景:
一、生成自签名证书(适用于测试或内部环境)
1. 生成私钥和自签名证书(一步完成)
bash
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=你的域名"
参数说明:
x509: 生成自签名证书。
newkey rsa:2048: 生成 2048 位 RSA 私钥。
keyout key.pem: 私钥保存到 key.pem。
out cert.pem: 证书保存到 cert.pem。
days 365: 有效期 365 天。
nodes: 私钥不加密(无密码)。
subj "/CN=example.com": 直接设置主题(省去交互式输入)。
2. 验证生成的证书
bash
openssl x509 -in cert.pem -text -noout
二、生成 CSR 并申请 CA 签发证书(适用于生产环境)
1. 生成私钥
bash
openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048
2. 生成证书签名请求(CSR)
bash
openssl req -new -key key.pem -out csr.pem -subj "/CN=你的域名"
如果需要交互式填写信息(国家、组织等),省略 -subj 参数。
3. 提交 CSR 到 CA
将 csr.pem 提交给证书颁发机构(如 Let's Encrypt、DigiCert 等),CA 会返回签发的证书文件(如 certificate.crt)。
三、附加:生成包含 SAN(主题备用名称)的证书
现代浏览器要求证书包含 subjectAltName,可通过以下方式生成:
1. 创建配置文件 san.cnf
ini
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = example.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
2. 生成带 SAN 的证书
bash
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -config san.cnf
四、注意事项
保护私钥:确保私钥文件(key.pem)权限设置为仅当前用户可读:
bash
chmod 400 key.pem
生产环境建议:自签名证书会引发浏览器警告,正式环境建议使用 Let's Encrypt 等免费 CA 或购买商业证书。
证书格式转换:如需转换格式(如 PEM 转 PFX/P12):
bash
openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem
用户通过以上四个步骤,就可以快速生成 SSL 证书。根据实际需求选择自签名或 CA 签发方案,并注意配置 SAN 以适配多域名场景。