证书格式转换

PEM 转 PFX

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

浏览器本地运行 私钥在你的浏览器里(WebCrypto)生成和处理,不会离开你的设备,也不会上传到 ssl.sh。

模式
站点证书在前,中间证书可以接在后面。
只有加密的私钥才需要(ENCRYPTED PRIVATE KEY 或带 Proc-Type: 4,ENCRYPTED)。

最后核实

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 命令

# 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,用私钥匹配工具找到对的私钥。
  • Windows 提示密码不正确(其实没输错):系统读不了 AES 加密的 PFX,用兼容模式重新生成。
  • 导入后检查显示证书链不完整:PFX 里没带中间证书,或者 Windows 里已有过期的中间证书。带上证书链重新导入。

常见问题

选哪种加密方式?

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

根证书要放进 PFX 吗?

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

PFX 能不设密码吗?

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

资料来源

  1. RFC 7292: PKCS #12
  2. OpenSSL pkcs12