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 必须是完整链(服务器证书在前,中间证书紧随其后),不能只放单张证书。
推荐分两步操作,避免遗漏中间证书:
- 先导出完整 PEM 包:
openssl pkcs12 -in your-cert.pfx -out cert.pem -nodes - 用文本编辑器打开 cert.pem,手动拆分:
- 第一个
-----BEGIN CERTIFICATE-----到对应-----END CERTIFICATE-----→ 保存为 server.crt - 后续所有
-----BEGIN CERTIFICATE-----块 → 全部复制粘贴追加到 server.crt 文件末尾(顺序不能错) - 单独的
-----BEGIN PRIVATE KEY-----块 → 已用于生成 server.key,此处忽略
- 第一个
验证与检查要点
转换完成后,务必确认以下几项:
-
编码无 BOM:用
file server.crt server.key检查是否为 “ASCII text”;若显示 “UTF-8 Unicode (with BOM)”,需用 vim 或 dos2unix 清除 BOM -
无多余空行:证书和私钥块首尾不能有空行,尤其
-----END后不可换行再写内容 -
证书链顺序正确:
head -n 5 server.crt应看到服务器证书,再往下应是中间证书,根证书一般不放入 -
私钥格式合规:运行
openssl rsa -check -in server.key -noout,无报错才表示私钥可被 Nginx 正确加载
Nginx 配置中如何使用
配置段示例(路径按实际调整):
server {
listen 443 ssl;
server_name example.com;
<pre class="brush:php;toolbar:false;">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,也不是单张证书。


















