先生成2048位无密码rsa私钥server.key,再用它生成含正确cn域名的csr文件server.csr;nginx仅需server.key和ca签发的证书,csr仅为申请用途。

直接用 OpenSSL 生成 Nginx 能用的私钥和 CSR 文件,关键在于两步:先生成安全可用的私钥,再基于它生成结构合规的 CSR。Nginx 本身不校验 CSR 内容,但后续申请正式证书或配置自签名时,Common Name(域名)、组织信息等必须准确,否则浏览器会报错或证书不被信任。
生成 RSA 私钥(server.key)
私钥是整个流程的基础,必须保密且格式兼容。推荐使用 2048 位 RSA 算法,无密码保护(避免 Nginx 启动时交互式输入):
-
无密码私钥(生产环境常用):
openssl genrsa -out server.key 2048 -
带密码私钥(测试可选):
openssl genrsa -des3 -out server.key 2048—— 若选此项,后续每次 Nginx 启动需手动输入密码,不适合自动化部署
生成后检查权限:chmod 600 server.key,防止非 root 用户读取。
生成 CSR 文件(server.csr)
CSR 是向 CA 提交的“证书申请单”,含公钥和身份信息。必须用上一步的私钥生成,且 Common Name 必须填你要部署 HTTPS 的完整域名(如 example.com 或 www.example.com,不能写 IP 或 localhost):
- 交互式填写(适合首次操作):
openssl req -new -key server.key -out server.csr - 一键生成(跳过交互,适合脚本):
openssl req -new -key server.key -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=example.com" -out server.csr
注意:/C=CN 是国家代码(中国为 CN),CN= 后必须是你实际要绑定的域名;其他字段可留空,但 CN 不可为空、不可拼错。
验证 CSR 内容是否正确
生成后别急着提交,先确认 CSR 里写的域名和组织信息是否符合预期:
- 查看内容:
openssl req -text -in server.csr -noout | grep "Subject:" - 重点核对输出中是否包含 CN=your-domain.com,且没有乱码或多余空格
若发现 CN 错了,只需重新运行 req -new 命令即可,无需重做私钥。
Nginx 配置时需用到的文件说明
最终你会得到两个核心文件:
-
server.key:私钥,Nginx 通过
ssl_certificate_key指令加载 -
server.csr:仅用于向 CA 申请证书,Nginx 运行时 不需要;申请成功后你会拿到
.crt或.pem格式的证书文件,再配合server.key一起配置
记住:.csr 不是证书,它只是“申请书”;真正让 Nginx 启用 HTTPS 的是证书(.crt/.pem)+ 私钥(.key)这对组合。











