术语表

PFX (.pfx 证书文件)

最后核实

定义

PFX 是 Windows 和 IIS 用来导入导出证书及其私钥、证书链的 .pfx 文件,格式就是 PKCS#12。

.pfx 文件就是使用微软惯用扩展名的 PKCS#12 归档。PFX 的名字来自微软的 Personal Information Exchange 格式,后来演变成 PKCS #12,如今 .pfx 和 .p12 的结构完全一样。在 Windows 证书导出向导中,"个人信息交换 - PKCS #12(.PFX)"是能连同私钥一起导出的选项;IIS、Exchange 以及很多 Windows 服务都从 .pfx 导入证书。

为什么重要

Windows 把私钥保存在系统自己的密钥存储里,所以备份服务器证书、迁移到另一台 IIS 或负载均衡、交给需要"证书加私钥"的服务,都靠导出 .pfx。私钥在生成或导入时必须被标记为"可导出",否则 PFX 选项是灰色的。国内云厂商的 IIS 格式下载包通常包含一个 .pfx 文件和一个记录密码的 txt 文件,导入时要用到这个密码。要在 Linux 服务器上使用,就需要把 .pfx 拆成 PEM 证书链和单独的私钥文件。

例子

$pw = Read-Host -AsSecureString
Import-PfxCertificate -FilePath C:\certs\example.com.pfx `
  -CertStoreLocation Cert:\LocalMachine\My -Password $pw
openssl pkcs12 -in example.com.pfx -clcerts -nokeys -out example.com.crt
openssl pkcs12 -in example.com.pfx -cacerts -nokeys -out chain.pem
cat example.com.crt chain.pem > fullchain.pem
openssl pkcs12 -in example.com.pfx -nocerts -nodes -out example.com.key

常见误区

  • PFX 和 PKCS#12 是两种格式。 现在的 .pfx 就是 PKCS#12。
  • 导出选项是灰的,说明证书坏了。 说明这台机器上没有对应私钥,或私钥被标记为不可导出。
  • nginx 可以直接加载 .pfx。 nginx 需要 PEM 文件,要先拆成 fullchain 证书文件和私钥文件。

延伸阅读