一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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 编码,也可能不是。关键看内容:

  1. head -n 2 your-file.pem 查看开头——必须是 -----BEGIN CERTIFICATE-----(证书)或 -----BEGIN PRIVATE KEY-----(私钥)
  2. file your-file.pem 检查类型——应返回类似 ASCII textPEM certificate
  3. openssl x509 -in your-file.pem -text -noout 验证是否为有效证书;若报错,说明它可能混了私钥、是 DER 格式,或已损坏

常见 PEM 相关整理操作

拿到一个 PEM 文件,常需以下处理才能用于 Nginx:

  1. 如果它同时含证书和私钥:必须手动分离。用文本编辑器或 awk 提取第一个 -----BEGIN CERTIFICATE----- 到对应 -----END CERTIFICATE----- 块,保存为 fullchain.pem;再提取 -----BEGIN PRIVATE KEY----- 块,另存为 privkey.key
  2. 如果它只有站点证书(无中间证书):需拼接中间证书链:cat domain.crt intermediate.crt > fullchain.pem,顺序不能错——服务器证书在前,中间证书在后
  3. 如果它是 Let’s Encrypt 默认输出:直接用 fullchain.pem(证书+中间链)和 privkey.pem,无需任何转换

不要做这些“伪转换”

很多操作看似在“转换”,实则多余甚至有害:

  1. 执行 openssl x509 -in cert.pem -out cert.crt:只是复制,可能破坏换行或编码,毫无必要
  2. .pem 文件简单重命名为 .crt:可以,但不解决实质问题;若原文件内容不对,改名也没用
  3. 把私钥和证书写进同一个文件供 ssl_certificate 使用:Nginx 会加载失败,报错如 SSL_CTX_use_certificate_chain_file failed

权限与路径必须到位

即使内容完全正确,Nginx 仍可能因权限或路径报错:

  1. 私钥文件权限必须是 600(仅属主可读写):chmod 600 privkey.key
  2. 证书和私钥文件路径在 nginx.conf 中要用绝对路径,或确保相对路径基于 Nginx 启动工作目录有效
  3. 检查 Nginx 是否启用了 SSL 模块:nginx -V 2>&1 | grep http_ssl_module,缺失需重新编译

热门栏目