SSL证书文件格式详解:PEM、CRT、DER、PFX、P7B的区别与转换

a
admin
作者
2026-07-27
发布日期
约 12 分钟
阅读时间

最近后台收到不少朋友的私信:申请证书后下载下来一堆文件,有 .crt.pem.key.pfx.der 各种后缀,搞不清楚区别,部署时也不知道用哪个。这篇就把常见证书格式都梳理一遍。

证书格式的两大分类

理解证书格式的关键,是先搞清楚两个维度:编码格式文件后缀

编码格式只有两种

  • PEM格式:Base64文本编码,以 -----BEGIN CERTIFICATE----- 开头,可以用记事本打开
  • DER格式:二进制编码,用记事本打开是乱码

文件后缀有很多种

  • .crt.cer.pem:通常是PEM编码的证书
  • .der:通常是DER编码的证书
  • .key:私钥文件
  • .pfx.p12:PKCS#12格式,包含证书和私钥
  • .p7b.p7c:PKCS#7格式,只包含证书链
  • .jks:Java KeyStore,Java专用

核心结论后缀 ≠ 编码格式.crt 文件可能是PEM编码也可能是DER编码,要看文件内容才知道。

PEM格式

特征

  • 文本格式,可以用记事本打开
  • 内容以Base64编码
  • -----BEGIN ... 开头,-----END ... 结尾
  • 常见后缀:.pem.crt.key.csr

典型内容

-----BEGIN CERTIFICATE-----
MIIFazCCBFOgAwIBAgISA2Q3N0pXV3J4S2tBaEdWOTYwRzR3MA0GCSqGSIb3DQEBCwUA
...
-----END CERTIFICATE-----

适用场景

  • Nginx、Apache配置
  • Linux服务器部署
  • 文本编辑器查看和修改

PEM是最常用的格式,90%的服务器部署都用PEM。从 sslmianfei.com 申请的ZeroSSL证书默认就是PEM格式。

DER格式

特征

  • 二进制格式,用记事本打开是乱码
  • 文件体积比PEM小
  • 常见后缀:.der.cer

适用场景

  • Java环境(部分情况)
  • Windows IIS部分版本
  • 嵌入式设备

PEM和DER的转换

# PEM转DER
openssl x509 -in cert.pem -outform der -out cert.der

# DER转PEM
openssl x509 -in cert.der -inform der -outform pem -out cert.pem

PKCS#12格式(.pfx/.p12)

特征

  • 二进制格式
  • 同时包含证书和私钥
  • 通常有密码保护
  • 常见后缀:.pfx.p12

适用场景

  • Windows IIS部署
  • Java KeyStore导入
  • 证书和私钥一起传输

生成PFX文件

openssl pkcs12 -export -out cert.pfx -inkey private.key -in cert.pem -certfile ca_bundle.pem

从PFX提取证书和私钥

# 提取私钥
openssl pkcs12 -in cert.pfx -nocerts -out private.key

# 提取证书
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem

如果想在线生成PFX,可以用站内的 证书转换工具,浏览器本地生成不用上传私钥。

PKCS#7格式(.p7b/.p7c)

特征

  • Base64或二进制格式
  • 只包含证书链,不含私钥
  • 常见后缀:.p7b.p7c

适用场景

  • Java环境
  • Windows服务器证书链导入

生成P7B文件

openssl crl2pkcs7 -nocrl -certfile cert.pem -out cert.p7b

从P7B提取证书

openssl pkcs7 -print_certs -in cert.p7b -out cert.pem

Java KeyStore格式(.jks)

特征

  • Java专用格式
  • 二进制格式
  • 包含证书和私钥
  • 有密码保护

适用场景

  • Tomcat服务器
  • Java应用

从JKS提取证书

keytool -list -keystore keystore.jks -storepass password
keytool -exportcert -alias myalias -keystore keystore.jks -storepass password -file cert.pem

私钥格式

私钥也有不同格式:

PKCS#1格式(RSA专用):

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA2Q3N0pXV3J4S2tBaEdWOTYwRzR3MA0GCSqGSIb3DQEBCwUA
...
-----END RSA PRIVATE KEY-----

PKCS#8格式(通用):

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDZDc3SldXc...
...
-----END PRIVATE KEY-----

EC私钥格式

-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIP...
...
-----END EC PRIVATE KEY-----

PKCS#1转PKCS#8

openssl pkcs8 -topk8 -inform PEM -outform PEM -in private_pkcs1.key -out private_pkcs8.key -nocrypt

不同服务器的格式要求

服务器类型 证书格式 私钥格式
Nginx PEM (.crt/.pem) PEM (.key)
Apache PEM (.crt/.pem) PEM (.key)
IIS PFX (.pfx) 包含在PFX中
Tomcat JKS (.jks) 或 PFX 包含在JKS/PFX中
宝塔面板 PEM (.crt/.pem) PEM (.key)

宝塔面板部署:直接在站点设置 → SSL → 粘贴PEM格式的证书和私钥即可。如果证书格式不对,用 证书查看工具 检查证书内容。

完整证书链文件

部署时通常需要把域名证书和中间证书合并成完整证书链:

# 你的域名证书
cat your_domain.crt > fullchain.pem

# 追加中间证书
cat ca_bundle.crt >> fullchain.pem

注意顺序:域名证书在前,中间证书在后,根证书通常不需要(浏览器自带)。

完整证书链的PEM文件内容类似:

-----BEGIN CERTIFICATE-----
(你的域名证书)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(中间证书)
-----END CERTIFICATE-----

如何识别证书格式

方法1:用记事本打开

  • 看到Base64文本 → PEM格式
  • 看到乱码 → DER格式(二进制)

方法2:用OpenSSL检测

# 检测PEM格式
openssl x509 -in cert.pem -text -noout

# 检测DER格式
openssl x509 -in cert.der -inform der -text -noout

方法3:用在线工具

把证书内容粘贴到 证书查看工具,自动识别格式并解析。

常见问题

Q:.crt和.pem有什么区别?

A:本质上没区别,都是PEM编码的证书,只是后缀名不同。.crt 多用于Linux,.pem 是通用后缀。

Q:申请证书后应该用哪个文件部署?

A:Nginx/Apache用 .crt + .key,IIS用 .pfx。具体看 证书转换工具 的转换指南。

Q:私钥可以转换格式吗?

A:可以。PKCS#1和PKCS#8可以互转,但RSA和EC不能互转(算法不同)。

Q:DER格式能用记事本修改吗?

A:不能。DER是二进制格式,修改会损坏文件。需要先转PEM,修改后再转回DER。

Q:根证书需要部署吗?

A:不需要。根证书浏览器和操作系统自带,服务器只需要部署域名证书和中间证书。

最后

证书格式看着复杂,核心就两件事:编码格式(PEM/DER)+ 内容(证书/私钥/两者打包)。

部署时记住:

  • Nginx/Apache/宝塔:用PEM格式(.crt + .key)
  • IIS:用PFX格式(.pfx)
  • Tomcat:用JKS或PFX格式

格式不对就用OpenSSL转换,或直接用 证书转换工具 在线转换。希望这篇能帮你理清证书格式的困惑。

本文到此结束