最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 SSL 证书如何从 PEM 格式转换为 Nginx 支持的证书格式
时间:2026-08-25 11:17:48 编辑:袖梨 来源:一聚教程网
Nginx仅原生支持PEM格式,所谓“转换”实为验证内容合规性、拆分私钥与证书、拼接完整证书链(服务器证书在前、中间证书在后)、确保文件为纯文本PEM编码且私钥权限为600。
Nginx 本身只支持 PEM 格式,所以“从 PEM 转为 Nginx 支持的格式”这个说法其实是个误区——PEM 就是 Nginx 唯一原生支持的证书格式。你不需要、也不能把 PEM “转换”成另一种 Nginx 可用的格式;真正要做的,是确认 PEM 文件内容合规、结构正确、权限合理,并按需拆分或拼接。
确认你的 PEM 文件是否真的可用
别被后缀名迷惑:.pem、.crt、.cert 都可能是 PEM 编码,也可能不是。关键看内容:
- 用
head -n 2 your-file.pem查看开头——必须是-----BEGIN CERTIFICATE-----(证书)或-----BEGIN PRIVATE KEY-----(私钥) - 用
file your-file.pem检查类型——应返回类似ASCII text或PEM certificate - 用
openssl x509 -in your-file.pem -text -noout验证是否为有效证书;若报错,说明它可能混了私钥、是 DER 格式,或已损坏
常见 PEM 相关整理操作
拿到一个 PEM 文件,常需以下处理才能用于 Nginx:
-
如果它同时含证书和私钥:必须手动分离。用文本编辑器或
awk提取第一个-----BEGIN CERTIFICATE-----到对应-----END CERTIFICATE-----块,保存为fullchain.pem;再提取-----BEGIN PRIVATE KEY-----块,另存为privkey.key -
如果它只有站点证书(无中间证书):需拼接中间证书链:
cat domain.crt intermediate.crt > fullchain.pem,顺序不能错——服务器证书在前,中间证书在后 -
如果它是 Let’s Encrypt 默认输出:直接用
fullchain.pem(证书+中间链)和privkey.pem,无需任何转换
不要做这些“伪转换”
很多操作看似在“转换”,实则多余甚至有害:
- 执行
openssl x509 -in cert.pem -out cert.crt:只是复制,可能破坏换行或编码,毫无必要 - 把
.pem文件简单重命名为.crt:可以,但不解决实质问题;若原文件内容不对,改名也没用 - 把私钥和证书写进同一个文件供
ssl_certificate使用:Nginx 会加载失败,报错如SSL_CTX_use_certificate_chain_file failed
权限与路径必须到位
即使内容完全正确,Nginx 仍可能因权限或路径报错:
- 私钥文件权限必须是
600(仅属主可读写):chmod 600 privkey.key - 证书和私钥文件路径在
nginx.conf中要用绝对路径,或确保相对路径基于 Nginx 启动工作目录有效 - 检查 Nginx 是否启用了 SSL 模块:
nginx -V 2>&1 | grep http_ssl_module,缺失需重新编译