Skip to content

PEM、CRT、CER、DER、PFX 与 JKS:证书文件怎么选? ​

判断一个证书文件,依次看三层:里面装了什么、采用什么编码、目标服务如何读取。 扩展名可以提供线索,最终以文件内容与解析结果为准。

常见格式对照 ​

名称含义与常见内容是否可能包含私钥常见用途
PEM带 BEGIN/END 标签的 Base64 文本编码;可装证书、私钥、CSR 等对象取决于标签和实际对象Nginx、Apache、HAProxy、面板及 Kubernetes TLS Secret 的输入材料
CRT常用于证书文件的扩展名;常见内容为 PEM,也可能是 DER标准证书对象只包含公钥;仍需检查文件实际内容Linux 证书文件命名
CER常用于证书文件的扩展名;可为 DER 或 PEM同上Windows 或设备的证书导入导出
KEY常用于私钥文件的扩展名,不限定具体编码或密钥格式通常包含私钥,应按敏感材料保管与证书配套的独立私钥文件
DERASN.1 数据的二进制编码规则;用于证书,也可编码其他对象取决于所编码的对象单张二进制证书、设备或程序接口
PFX / P12日常证书交付中通常指 PKCS#12 容器,可装私钥、证书及证书链可以;也可能只装证书IIS 导入、身份材料迁移、Java PKCS12 密钥库
JKSJava KeyStore 文件格式,按 Alias 保存私钥条目及证书链,或受信任证书条目可以,需查看条目类型使用 JKS 的 Java 服务

例如,server.crt 与 server.pem 可以保存同一份 PEM 证书。将 DER 文件改名为 .pem 只改变文件名;转换编码需要使用解析工具。

PEM 使用 Base64 编码,私钥的密码保护由具体密钥格式和加密设置提供。含私钥的 PEM、PFX、JKS 都应限制访问,并在可信的本地环境中转换。

先识别对象,再选择工具 ​

PEM 标签中的 CERTIFICATE 表示证书,CERTIFICATE REQUEST 表示 CSR,PUBLIC KEY 表示公钥;PRIVATE KEY、ENCRYPTED PRIVATE KEY 以及某些算法专用私钥标签表示私钥材料。

一个 PEM 文件可以包含多段对象。部署用 fullchain.pem 通常放站点证书及中间链;HAProxy 等场景还可能要求把私钥放入同一个 PEM 文件。应结合目标配置检查整个文件。

下面命令适用于已安装 OpenSSL 的终端;文件名替换为本地文件。命令仅解析材料,信任验证见信任链指南。

读取 PEM 或 DER 证书 ​

PEM 证书:

sh
openssl x509 -inform PEM -in server.pem -noout -subject -issuer -dates -fingerprint -sha256

DER 证书:

sh
openssl x509 -inform DER -in server.cer -noout -subject -issuer -dates -fingerprint -sha256

按已知编码选择命令。读取失败时,确认文件是否实际为 CSR、私钥、PKCS#7 或密钥容器,以及文件是否完整。openssl x509 默认检查单张证书;多段 PEM 的完整链需另外检查。

检查 PFX 内容类型 ​

sh
openssl pkcs12 -in server.pfx -info -noout

在交互提示中输入容器密码。-noout 避免输出证书和私钥本体,信息中可查看证书袋、密钥袋及保护算法。容器是否能在目标 Windows 或 Java 版本中导入,还取决于其支持的保护算法。

检查 Java 密钥库 ​

sh
keytool -list -v -storetype JKS -keystore server.jks

若实际格式是 PKCS#12,则使用:

sh
keytool -list -v -storetype PKCS12 -keystore server.pfx

输入密钥库密码后,检查目标 Alias 和条目类型:

  • PrivateKeyEntry:包含私钥及关联证书链,服务端身份通常引用此类条目。
  • trustedCertEntry:保存受信任证书,用于信任判断。

Keystore 与 truststore 描述使用角色,两者都可能采用 JKS 或 PKCS12。Java 9 起默认密钥库类型为 PKCS12;实际服务仍按其配置、Provider 与文件内容读取。

编码转换:PEM 与 DER ​

以下转换只处理单张公开证书,使用不同输出文件名保留原件。

sh
openssl x509 -inform DER -in server.cer -outform PEM -out server-converted.pem
openssl x509 -inform PEM -in server.pem -outform DER -out server-converted.der

转换前后可用上面的读取命令比较 SHA-256 证书指纹。指纹一致表示证书本体一致;有效期、公钥与签发者签名均保持原样。

上述 openssl x509 命令计算解析后证书的 DER 指纹;文件哈希则包含换行、空白等文本差异。核对同一张证书时,比较证书指纹;核对文件是否逐字节相同时,比较文件哈希。

按部署环境选择 ​

环境应准备的材料继续阅读
Nginx / ApachePEM 站点证书、中间链与匹配私钥,按指令分别引用Nginx · Apache
IIS含匹配私钥的 PFX,导入证书存储后配置 HTTPS 绑定IIS 部署
Tomcat与 Connector 配置一致的 JKS 或 PKCS12,核对 Alias、密码和私钥条目Tomcat 部署
HAProxy按 bind 配置准备证书链与私钥材料,现有教程采用合并 PEMHAProxy 部署
宝塔 / 1Panel按面板输入项提供 PEM 证书链与私钥宝塔 · 1Panel
Kubernetestls.crt 存 PEM 证书链,tls.key 存匹配私钥,并由入口引用 SecretKubernetes 部署

PFX/JKS 中的私钥条目需要原私钥和匹配证书才能建立。已有 KeyManager 材料时,优先按下载与导出指南操作;缺少私钥时,先按私钥来源指南查找。

部署 SM2 证书时,除文件格式外,还要确认目标协议栈支持 SM2。KeyManager 目前不支持将国密证书导出为 JKS/PFX。

下一步 ​

参考资料 ​