用户首先生成私钥: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 以适配多域名场景。