ssl tls certificates pki ssh pgp security file-extensions

证书与密钥文件后缀完全指南:PEM, CRT, DER, PFX 等详解

对 SSL/TLS、SSH 和 PGP 文件后缀感到困惑?了解 .pem, .crt, .cer, .der, .key, .p12, .pfx, .p7b 和 .asc 文件的区别,以及如何打开或转换它们。

2026-04-11

证书和密钥文件扩展名完整指南:PEM、CRT、DER、PFX 等

如果你曾经配置过 Web 服务器(如 Nginx 或 Apache)、管理过 SSH 密钥或处理过数字签名,你可能会遇到一系列令人困惑的文件扩展名:.pem.crt.cer.der.p12.pfx.key.csr 等。

它们都一样吗?可以简单地重命名吗?本指南将揭开这些扩展名的神秘面纱,解释其内部构成,并向你展示如何有效地使用它们。

为什么会有这么多扩展名?

这种混乱主要源于两点:

  1. 标准 (X.509):这是公钥证书的国际标准。
  2. 编码方式:证书数据在文件中的实际存储方式(Base64 ASCII 文本 vs. 二进制)。

本质上,不同的平台(Windows vs. Linux)、不同的服务器(IIS vs. Nginx)以及不同的协议(SSL/TLS vs. SSH vs. PGP)在历史上都有各自偏好的方式来存储相同的基础加密信息。


快速参考表:常见的证书和密钥扩展名

扩展名 格式 描述 常见用途
.pem ASCII (Base64) 隐私增强型邮件 (Privacy Enhanced Mail) Web 服务器 (Nginx, Apache)、SSL/TLS 证书、私钥
.crt, .cer ASCII 或 二进制 证书 (Certificate) 仅公钥证书(无私钥)
.der 二进制 可辨别编码规则 (Distinguished Encoding Rules) Java 平台、Windows(常用于特定的 CA 证书)
.key ASCII 或 二进制 私钥 (Private Key) 与公钥证书匹配的私钥
.csr ASCII (Base64) 证书签名请求 (Certificate Signing Request) 发送给 CA 以请求签名证书的文件
.p12, .pfx 二进制 PKCS#12 存档 将证书及其私钥捆绑到一个受密码保护的文件中
.p7b, .p7c ASCII (Base64) PKCS#7 / CMS 导出证书链(无私钥)
.asc, .sig, .gpg ASCII 或 二进制 PGP / OpenPGP 数字签名、加密电子邮件和软件验证

1. X.509 证书编码(“三大巨头”)

PEM (Privacy Enhanced Mail) — .pem, .crt, .cer, .key

这是在 Linux 和 Web 服务器上最常见的格式。它是一种基于 ASCII(文本)的格式,以 -----BEGIN CERTIFICATE----- 等标头开头,以 -----END CERTIFICATE----- 结尾。中间的数据是 Base64 编码的。

  • 优点:人类可读,易于复制/粘贴到配置文件中。
  • 扩展名用法:虽然 .pem 是标准,但许多人对公钥证书使用 .crt.cer,对私钥使用 .key,即使它们在技术上都属于 PEM 格式。

DER (Distinguished Encoding Rules) — .der, .cer

这是 PEM 文件的二进制版本。如果你在文本编辑器中打开它,你会看到“乱码”字符。

  • 优点:比 PEM 更紧凑。
  • 在哪里可以找到:在 Java 环境、Windows 证书导出和某些硬件安全模块 (HSM) 中很常见。

PKCS#12 (Personal Information Exchange) — .p12, .pfx

与通常只包含单个证书或密钥的 PEM 和 DER 不同,PKCS#12 是一种存档格式。它可以将证书、私钥以及整个 CA 链存储在一个受密码保护的文件中。

  • 在哪里可以找到:Windows (IIS)、Java (KeyStore) 和 macOS 钥匙串的标准格式。
  • 注意.pfx 是旧的 Microsoft 扩展名,而 .p12 是较新的跨平台标准,但它们在功能上是相同的。

2. 请求和元数据扩展名

CSR (Certificate Signing Request) — .csr

这本身不是证书。它是你在服务器上生成的请求(包含你的公钥和组织信息),发送给证书颁发机构(如 Let's Encrypt, DigiCert)。他们会对其进行签名并返回 .crt.pem 文件。

PKCS#7 / CMS — .p7b, .p7c

此格式主要用于共享“证书链”。它可能包含你的证书加上中级和根 CA 证书。它从不包含私钥。当你从 CA 下载“Windows”或“IIS”格式的证书时,经常会看到这种格式。


3. PGP 和 GPG 扩展名

如果你正在验证软件下载(如 Linux 内核或流行的库),你会看到:

  • .asc:ASCII 铠装的 PGP 文件(基于文本的签名)。
  • .sig, .gpg:二进制 PGP 签名或密钥。
  • .pub:通常用于表示 PGP 公钥。

4. 如何打开和验证这些文件

在 Linux / macOS / Windows 上(使用 OpenSSL)

OpenSSL 是处理这些文件的瑞士军刀。以下是一些常用命令:

查看 PEM 文件(公钥证书):

openssl x509 -in certificate.crt -text -noout

查看 DER 文件(二进制):

openssl x509 -in certificate.der -inform der -text -noout

查看 PKCS#12 (.p12 / .pfx) 文件:

openssl pkcs12 -info -in key-and-cert.p12

5. 格式转换

不同平台通常需要特定格式。以下是转换方法:

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

PEM 转 PFX (.p12):(需要合并证书和私钥)

openssl pkcs12 -export -out certificate.pfx -inkey private.key -in certificate.crt -certfile CA-chain.crt

常见问题 (FAQ)

问:我可以简单地将 .pem 文件重命名为 .crt 吗?

:在许多情况下是可以的。大多数 Web 服务器(如 Nginx)会查找文件内部的 "BEGIN CERTIFICATE" 标头,而不是根据扩展名判断。但是,如果平台期望的是二进制 .der 文件,而你提供的是重命名的 .pem 文件,则会失败。

问:.p12 和 .pfx 有什么区别?

:没有功能上的区别。.pfx 是 Microsoft 的专有扩展名,而 .p12 是行业标准 (PKCS#12)。它们都作为证书和私钥的受密码保护的容器。

问:为什么我在 .p7b 文件中看不到我的私钥?

:因为 PKCS#7 标准(由 .p7b 使用)专门设计用于证书分发,不支持存储私钥。如果你需要捆绑私钥,必须使用 PKCS#12 (.p12)。

问:.key 文件总是私钥吗?

:通常是,但并非总是如此。虽然 .key 是私钥的常规扩展名,但一些供应商将其用于公钥甚至许可证文件。始终检查内容(例如 -----BEGIN PRIVATE KEY-----)。


Tool3M 相关工具

  • 哈希生成器:使用 SHA-256 验证下载的证书文件的完整性。
  • SSL/TLS 证书指南:详细了解底层安全协议。