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

最新下载

热门教程

SSL 证书如何将 PFX 格式证书转换为 Nginx 可用的 PEM 格式

时间:2026-08-17 08:18:49 编辑:袖梨 来源:一聚教程网

Nginx不支持PFX,须拆解为server.crt(含完整证书链)和server.key(无密码PEM私钥,chmod 600);需用openssl pkcs12分步导出并手动校验顺序、编码、权限及格式。

Nginx 不支持直接使用 PFX 文件,必须拆解为两个独立的 PEM 格式文件:一个含证书链的 .crt(或 .pem),一个明文私钥 .key。整个过程本质是“解包+分离+校验”,不是简单改后缀。

提取私钥(server.key)

PFX 中的私钥默认加密,Nginx 要求能直接读取——所以需导出为无密码的 PEM 私钥(生产环境建议后续再加密码保护):

执行命令:

openssl pkcs12 -in your-cert.pfx -nocerts -nodes -out server.key

输入 PFX 文件密码后,输出的 server.key 应以 -----BEGIN PRIVATE KEY----- 开头。完成后立即设置权限:

chmod 600 server.key

Nginx 拒绝加载权限高于 600 的私钥文件,这是硬性要求。

提取证书链(server.crt)

PFX 里通常包含服务器证书 + 一个或多个中间证书。Nginx 的 ssl_certificate 必须是完整链(服务器证书在前,中间证书紧随其后),不能只放单张证书。

推荐分两步操作,避免遗漏中间证书:

  1. 先导出完整 PEM 包:openssl pkcs12 -in your-cert.pfx -out cert.pem -nodes
  2. 用文本编辑器打开 cert.pem,手动拆分:
    1. 第一个 -----BEGIN CERTIFICATE----- 到对应 -----END CERTIFICATE----- → 保存为 server.crt
    2. 后续所有 -----BEGIN CERTIFICATE----- 块 → 全部复制粘贴追加到 server.crt 文件末尾(顺序不能错)
    3. 单独的 -----BEGIN PRIVATE KEY----- 块 → 已用于生成 server.key,此处忽略

验证与检查要点

转换完成后,务必确认以下几项:

  1. 编码无 BOM:用 file server.crt server.key 检查是否为 “ASCII text”;若显示 “UTF-8 Unicode (with BOM)”,需用 vim 或 dos2unix 清除 BOM
  2. 无多余空行:证书和私钥块首尾不能有空行,尤其 -----END 后不可换行再写内容
  3. 证书链顺序正确head -n 5 server.crt 应看到服务器证书,再往下应是中间证书,根证书一般不放入
  4. 私钥格式合规:运行 openssl rsa -check -in server.key -noout,无报错才表示私钥可被 Nginx 正确加载

Nginx 配置中如何使用

配置段示例(路径按实际调整):

server {listen 443 ssl;server_name example.com;
ssl_certificate /etc/nginx/ssl/server.crt;ssl_certificate_key /etc/nginx/ssl/server.key;# 其他 SSL 设置(协议、加密套件等)ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;

}

注意:ssl_certificate 指向的是合并了服务器证书和中间证书的 server.crt,不是原始 PFX,也不是单张证书。

热门栏目