# PEM 转 PFX 在线转换（P12，浏览器本地）

> 把 PEM 证书、证书链和私钥打包成带密码的 PFX/P12 文件，用于 IIS、Windows、Azure 和 Java，支持 AES 和 3DES 兼容模式。

Source: https://ssl.sh/zh/tools/ssl-converter/pem-to-pfx/
Last updated: 2026-11-10

把 PEM 证书、证书链和私钥打包成一个带密码的 .pfx/.p12 文件，全程在浏览器里完成。

PEM 转 PFX 工具把证书、证书链和私钥打包成一个带密码的 PFX（也叫 P12、PKCS #12）。粘贴证书（带不带中间证书都行）、私钥，以及可选的证书链，设置密码后点 **生成 PFX**。工具会确认私钥属于这张证书、排好证书链顺序，然后提供 `.pfx` 下载。私钥只在你的浏览器里处理。

## 什么时候需要 PFX

- **IIS 和 Windows Server**：证书导入向导和 `Import-PfxCertificate` 都要 PFX。
- **Azure 应用服务、Key Vault**：上传证书要 PFX。
- **Exchange、远程桌面、ADFS** 等 Windows 服务。
- **Java 和 Tomcat**：Java 9 起 PKCS #12 是默认密钥库类型，Tomcat 可以直接用 `certificateKeystoreFile` 读取。

## 国内常见情况

- 在阿里云、腾讯云申请时如果下载的是 Nginx 格式（`.pem`/`.crt` + `.key`），但服务器是 IIS，就在这里转成 PFX；不过云厂商通常也提供 IIS 格式的下载包，里面直接就是 `.pfx` 和密码文件。
- 手动部署 IIS 时，把 PFX 导入“本地计算机 → 个人”证书存储，再在站点的 https 绑定里选择这张证书。

## 步骤

1. 粘贴证书。CA 发来的是证书包就整体粘贴，站点证书放不放第一位都行，工具会按私钥找出站点证书。
2. 粘贴私钥（`BEGIN PRIVATE KEY`、`BEGIN RSA PRIVATE KEY` 或 `BEGIN EC PRIVATE KEY`），加密的私钥填上私钥密码。
3. 两次输入 PFX 密码，可选填“友好名称”（在 Windows 证书管理里显示）。
4. 只有老系统才勾选兼容模式，然后点 **生成 PFX**。

## 等价的 OpenSSL 命令

```bash
# OpenSSL 3 默认：AES-256-CBC、PBKDF2、HMAC-SHA256
openssl pkcs12 -export -out example.com.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem -name example.com
# 兼容模式：Windows Server 2016 / Java 8
openssl pkcs12 -export -out example.com.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem \
  -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -macalg sha1
```

## 常见错误

- **“私钥和这些证书都不匹配”**：私钥来自另一份 CSR，用[私钥匹配工具](https://ssl.sh/zh/tools/key-matcher/)找到对的私钥。
- **Windows 提示密码不正确**（其实没输错）：系统读不了 AES 加密的 PFX，用兼容模式重新生成。
- **导入后检查显示证书链不完整**：PFX 里没带中间证书，或者 Windows 里已有过期的中间证书。带上证书链重新导入。


## FAQ

**选哪种加密方式？**

Windows Server 2019 及以上、新版 macOS、Java 11+ 用默认的 AES-256。老系统导入时提示密码错误或无法识别，再用兼容模式（3DES + SHA-1）重新生成。

**根证书要放进 PFX 吗？**

服务器用的话不需要，客户端本来就有根证书。放站点证书和中间证书即可。

**PFX 能不设密码吗？**

技术上可以，Windows 也能导入，但拿到文件的人就拿到了私钥。只要文件要离开服务器，就一定设密码。
