Nginx不支持PFX,须拆解为server.crt(含完整证书链)和server.key(无密码PEM私钥,chmod 600);需用openssl pkcs12分步导出并手动校验顺序、编码、权限及格式。
Nginx 不支持直接使用 PFX 文件,必须拆解为两个独立的 PEM 格式文件:一个含证书链的 .crt(或 .pem),一个明文私钥 .key。整个过程本质是“解包+分离+校验”,不是简单改后缀。
执行命令:
openssl pkcs12 -in your-cert.pfx -nocerts -nodes -out server.key
输入 PFX 文件密码后,输出的 server.key 应以 -----BEGIN PRIVATE KEY----- 开头。完成后立即设置权限:
chmod 600 server.key
Nginx 拒绝加载权限高于 600 的私钥文件,这是硬性要求。
ssl_certificate 必须是完整链(服务器证书在前,中间证书紧随其后),不能只放单张证书。推荐分两步操作,避免遗漏中间证书:
openssl pkcs12 -in your-cert.pfx -out cert.pem -nodes
-----BEGIN CERTIFICATE----- 到对应 -----END CERTIFICATE----- → 保存为 server.crt
-----BEGIN CERTIFICATE----- 块 → 全部复制粘贴追加到 server.crt 文件末尾(顺序不能错)-----BEGIN PRIVATE KEY----- 块 → 已用于生成 server.key,此处忽略转换完成后,务必确认以下几项:
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 正确加载配置段示例(路径按实际调整):
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,也不是单张证书。