# PFX（.pfx 证书文件）是什么？定义、例子与常见误区

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

Source: https://ssl.sh/zh/glossary/pfx/
Last updated: 2026-11-10

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

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

## 例子
```powershell
$pw = Read-Host -AsSecureString
Import-PfxCertificate -FilePath C:\certs\example.com.pfx `
  -CertStoreLocation Cert:\LocalMachine\My -Password $pw
```

```bash
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](https://ssl.sh/zh/glossary/fullchain/) 证书文件和私钥文件。

## 相关术语

- [PKCS#12](https://ssl.sh/zh/glossary/pkcs12/): PKCS#12 是一种用口令保护的二进制容器格式，可以把私钥、证书和证书链打包进一个文件，扩展名通常是 .p12 或 .pfx。
- [私钥](https://ssl.sh/zh/glossary/private-key/): 私钥是非对称密钥对中保密的那一半，TLS 服务器用它证明自己拥有证书里的那把公钥。
- [CRT 文件](https://ssl.sh/zh/glossary/crt-file/): CRT 文件是存放 X.509 证书的 .crt 或 .cer 文件，内容可能是 PEM 文本，也可能是二进制 DER，取决于生成它的平台。
- [PEM](https://ssl.sh/zh/glossary/pem/): PEM 是一种把 DER 二进制数据做 Base64 编码、再用 BEGIN 和 END 行包起来的文本格式，是存放证书和私钥最常见的方式。
- [KEY 文件](https://ssl.sh/zh/glossary/key-file/): KEY 文件是按惯例存放私钥的 .key 文件，通常为 PEM 编码，但扩展名本身并不说明里面的具体格式。
- [证书链](https://ssl.sh/zh/glossary/certificate-chain/): 证书链是从网站终端证书经中间证书一直到受信任根证书的有序证书序列，每一张都由下一张签名。
- [fullchain](https://ssl.sh/zh/glossary/fullchain/): fullchain 是依次包含站点证书和中间证书的 PEM 文件，让客户端能把站点证书连到受信任的根证书。
