- .cer 和 .crt 格式通常包含 PEM 或 DER 格式的公共 X.509 证书,而 .pfx 和 .p12 是 PKCS#12 容器,其中包含证书、证书链和受密码保护的私钥。
- PEM 和 PKCS#7 (.p7b) 使用 Base64 ASCII 编码,DER 和 PKCS#12 是二进制编码;它们都表示相同的加密信息,只是容器和用途不同。
- 私钥存储在 .key 文件或 .pfx/.p12 文件中,绝不会存储在 .p7b 文件中;区分密钥的位置对于安装、导出或续订证书至关重要。
- OpenSSL 允许在 PEM、DER、PKCS#7 和 PKCS#12 之间进行转换,从而可以轻松地将任何证书调整为每个服务器或系统所需的格式。

如果你来这里是为了寻找…… .pfx、.p12、.cer 和 .crt 之间的区别在服务器上安装数字证书或 SSL 证书时,您可能已经遇到过不止一个奇怪的文件。您并不孤单:各种缩写、扩展名和格式很容易让人感到困惑,不知道每个文件的作用,也不知道在特定情况下需要哪个文件。
好消息是,虽然这些名称看起来可能令人生畏,但如果我们理解所有这些文件只不过是……,那么这一切都可以解释得非常简单。 证书和密钥容器 以不同的格式(文本或二进制)和为不同的系统设计(Windows, Linux(Java、浏览器等等)。我们将逐一冷静地了解它们,并将它们相互联系起来,以便您确切地知道每样东西是什么、它的用途以及在必要时如何使用或转换它们。
什么是数字证书?.pfx、.p12、.cer 和 .crt 证书之间有什么关系?
数字证书只不过是一种 由认证机构签署的电子文档 (CA,或根据 eIDAS 法规,合格服务提供商)将身份与公钥关联起来。该身份可以是个人、公司、网络服务器、域名等。
为了实现这种连接,使用了以下方法: 公钥或非对称加密系统包含一对密钥:公钥(任何人都可以知道)和私钥(只有所有者才能拥有)。用公钥加密的内容只能用私钥解密,反之亦然,从而实现身份验证、加密和电子签名。
所有这些证书背后都隐藏着一个秘密。 公钥基础设施(PKI)其中包括证书颁发机构、注册机构、证书存储库、证书吊销列表 (CRL),以及在许多环境中用于记录签名时间的时间戳机构 (TSA)。
绝大多数通用证书的内部结构都遵循标准。 X.509该标准由 ITU 定义,并在 RFC 5280 中进行了详细描述。该标准定义了版本、序列号、签名算法、颁发者、有效期、主题、持有者公钥以及可能的附加扩展等字段。
关于算法,证书通常使用非对称加密。 RSA、DSA 或 ECDSARSA 和 ECDSA 既用于签名也用于加密,而 DSA 则专注于数字签名签名和验证。
内部格式和扩展名:PEM、DER、CER、CRT 和公司
当我们谈到扩展程序时,例如 .cer、.crt、.pem、.der、.pfx、.p12 或 .p7b实际上,我们混淆了两个概念:证书的编码格式(Base64 文本或二进制)和文件的功能(仅证书、证书 + 私钥、证书链等)。
在内部格式层面,X.509 证书以如下方式表示: ASN.1 通常使用 DER(二进制)或其文本变体 PEM(DER 转换为 Base64 并封装了类似标头)进行编码。 开始/结束由此,不同的系统和标准被定义。 特定容器 例如 PKCS#7 (.p7b) 或 PKCS#12 (.pfx, .p12)。
避免混淆的关键在于记住,文件扩展名通常只有一个。 命名规则.cer 文件或 .crt 文件可以包含完全相同的内容,只是前者在 Windows 系统中使用较多,而后者在 Unix/Linux 系统中使用较多,举例来说。
在这个大类群体中,有一些 关键格式 清楚地理解这些概念非常重要,因为在使用 SSL/TLS 或个人证书时,你会经常遇到它们。
PEM格式:证书的“可读文本”
PEM 格式是目前为止服务器(例如 Apache 或 Nginx)以及大多数安全工具中最常用的 SSL/TLS 证书格式。PEM 文件本质上就是一个…… DER 以 Base64 编码并被文本头包围这样你就可以用它来打开和复制任何编辑器(记事本、nano、vim 等)。
PEM 文件之所以能被识别,是因为它的内容由类似这样的行分隔。 ––BEGIN证书- y -结束证书- 当它包含证书时,或者 —–私钥开始—– y ——私钥结束—— 当它包含私钥时。中间的所有内容都是表示原始二进制数据的 Base64 字符串。
在一个 PEM 文件中,您可以拥有 仅证书您可以提供证书以及中间 CA 链、单独的私钥,甚至整个证书包(私钥、服务器证书、中间证书和根证书)。证书签名请求也支持 PEM 格式。 企业社会责任它们只不过是将 PKCS#10 结构重新编码成文本而已。
这种格式最初在 RFC 1421-1424 中定义,是隐私增强型电子邮件项目的一部分。该项目虽然没有在电子邮件领域得到广泛应用,但却留下了一种优秀的文本格式。 传输加密数据 以舒适、清晰易读且易于复制/粘贴的格式。
实际上,带有扩展名的文件 .pem、.crt、.cer 或 .key 在 Unix/Linux 系统中,它们通常是 PEM 文件。一般来说,.key 文件包含私钥,.crt 或 .cer 文件包含服务器证书,有时还会有一个额外的 PEM 文件包含中间 CA 链。
DER 格式:纯粹简单的二进制格式
DER(区分编码规则)是 二进制编码格式 这是描述 X.509 证书的 ASN.1 结构。它不是文本,所以如果您用编辑器打开它,您会看到一些奇怪的字符,而不是典型的 Base64 字符串。
DER 文件可以包含 任何类型的证书或私钥它通常以 .der 或 .cer 扩展名来识别,尤其是在 Windows 环境或 Java 平台上。在 Windows 系统中,.der 文件会被直接识别为证书文件,双击即可使用系统自带的证书查看器打开。
PEM 的实际区别在于,PEM 可以轻松复制并通过电子邮件发送或粘贴到网页表单中,而 DER 则是一种 封闭二进制块 专为应用程序直接使用而设计。但其内部信息却是一致的:PEM 文件只不过是将 DER 文件重新编码为 Base64 文本而已。
OpenSSL 等工具允许您使用单个命令在 DER 和 PEM 之间切换,而无需更改证书的逻辑内容,只需更改其表示形式即可。
.cer 和 .crt 扩展名:同一只狗,戴着不同的项圈
.cer 和 .crt 扩展名用于指定 包含公钥证书的文件通常采用 PEM 或 DER 格式,具体取决于生成或安装它们的系统。
在某些情况下,Apache 服务器上的 .crt 文件将是一个 获得PEM认证 .cer 文件被 BEGIN/END CERTIFICATE 标头包围,可以直接粘贴到配置块中。在 Windows 系统中,.cer 文件可以是 PEM 格式,也可以是 DER 格式,但通常取决于生成该文件的工具。
需要理解的关键是,文件扩展名并不严格定义其内部格式:.cer 文件可以是 PEM 文本格式,也可以是 DER 二进制格式,而像 OpenSSL 这样的查看器或实用程序会决定如何读取它。在浏览器和 Windows 系统中,双击即可打开…… 证书查看器您可以在这里看到发行方、主题、有效期、密钥用途等信息。
当您从浏览器或 Windows 证书存储区导出不包含私钥的证书时,通常会得到一个 .cer 文件,该文件用于…… 验证签名、信任链或加密信息但绝不能代表所有者签字(为此您需要私钥,私钥是单独的或位于受保护的容器中)。
CSR、密钥、CA 和中间文件:证书附带的其他文件
处理 SSL 证书或个人证书时,您不仅会看到 .pfx、.p12 或 .cer 文件。整个过程还涉及其他文件,例如 .csr、.key 或 CA 证书 (根和中间体),它们对于一切的正常运作都同样重要。
签名请求或 企业社会责任 (.csr) 这是一个通常在安装 SSL 证书的服务器上生成的文件。它包含公钥、域名、组织、国家/地区以及证书颁发机构用于颁发证书的其他信息。它遵循 PKCS#10 标准,通常采用 PEM 编码,因此您可以将其复制并粘贴到提供商的表单中。
私钥或 密钥(.key) 这是存储与证书关联的私钥的文件。它通常采用 PEM 格式,以 BEGIN PRIVATE KEY 和 END PRIVATE KEY 分隔。这是一个极其敏感的文件,不应共享或上传到公共存储库,而且在很多情况下,它还受到密码保护。
的文件 CA 或授权证书 它包含颁发或中介证书的实体的公钥。浏览器和 操作系统 它们自带一个默认的受信任 CA 列表,但有时您需要安装中间证书来完善信任链,以便客户端可以无错误地验证您的服务器证书。
这些中间证书可以以 PEM 文件(.pem、.crt、.cer)的形式提供,也可以放在容器中,例如: .p7b在主机配置中,经常会要求提供 CRT(域名证书)、KEY(私钥)和 CA 或中间证书文件才能正确安装 SSL。
PKCS#7 / P7B:不含私钥的证书链
PKCS#7,通常以扩展名表示 .p7b 或 .p7c它是一种旨在将一个或多个证书分组到一个结构化容器中的格式,其中不包含私钥。它通常用于 分发证书链 Windows 或 Java 环境中的(服务器证书加上中间证书)(Tomcat、密钥库等)。
.p7b 文件通常采用 Base64 ASCII 编码,类似于 PEM 文件,最初在 RFC 2315 中作为公钥加密标准的一部分定义。如今,它的继任者是 CMS(加密消息语法),但 PKCS#7 这个名称在 SSL 证书领域仍然被广泛使用。
当你需要的时候,这种格式非常有用。 建立完整的信任链 证书存储在服务器或通过证书存储(例如 Java 密钥库)管理证书的系统中。通常,SSL 提供商会同时提供服务器证书和包含完整 CA 链的 .p7b 文件,或者提供一个包含所有证书的 .p7b 文件。
如果您想将 .p7b 文件转换为 PEM 格式,可以使用 OpenSSL 等工具,通过一条命令即可提取证书并将其保存到一个或多个文本文件中。之后,如果您需要将证书单独上传到服务器,可以将 BEGIN/END CERTIFICATE 块分离出来。
需要注意的是,PKCS#7 文件 它绝不包含私钥因此,它本身对签名或解密没有用处:它只提供证书链的公共部分来验证信任。
PKCS#12:.pfx 和 .p12 到底是什么?
PKCS#12 标准定义了一个受密码保护的二进制容器,该容器可以包含 公钥证书、完整的 CA 链和私钥 相关格式。该格式最常见的扩展名是 .pfx 和 .p12,它们实际上等效。
从历史上看,PKCS#12 最初是一种与微软密切相关的格式,但随着…… El Temppo 它在 RFC 7292 中被标准化,如今被各种类型的系统所采用,正是因为它允许 安全传输证书和私钥对 从一个团队到另一个团队。
在 Windows 系统中,当您从用户或计算机证书存储中导出“私钥”证书时,向导会生成一个 .pfx(或 .p12)文件,其中包含将其导入另一个系统所需的一切:私钥、证书持有者,以及通常的中间链。
在创建或导出 PKCS#12 文件时,系统会要求您指定一个参数。 密码保护稍后将需要此密码才能将文件导入其他浏览器、IIS、电子邮件客户端甚至其他操作系统。这样,即使有人窃取了 .pfx 文件,也必须知道密码才能使用该文件。
OpenSSL 等工具允许您将 .pfx 或 .p12 文件转换为 PEM,这样您就可以获得一个文本文件,在其中可以轻松找到私钥块、服务器证书和中间证书,并将它们复制到适当的地方(例如,在只接受 CRT、KEY 和 CA 单独输入的托管面板中)。
.pfx 和 .p12 证书的续期、导出和导入
在个人证明(例如,由FNMT或其他机构签发的用于身份识别的证明)领域,备份和更新这些证明的方式与以下方面的使用密切相关: .pfx 或 .p12 文件它们通过加密卡和代币进行传输。 USB 或者直接作为计算机上的受保护文件。
如果您的个人证书尚未过期,许多机构允许 在线续费续期功能已在注册点(专业协会、公司、认证服务提供商等)启用,您将收到一封包含链接的电子邮件,以便您在自己的计算机上完成续期流程。
但是,如果证书已经过期,您通常需要…… 亲自出席 携带您的加密卡或存储过期证书的设备前往同一注册点,进行身份验证并申请新的证书颁发,您可以再次将其导出为 .pfx 或 .p12 格式,以便在需要的地方导入。
在类似这样的浏览器中 Edge 或 Chrome进口流程如下: Windows 证书存储区在隐私和安全设置中,您可以打开证书管理器,选择“个人”选项卡,然后导入 .pfx 或 .p12 文件。向导会要求您输入容器密码,并询问您是否将密钥标记为可导出以便将来备份。
如果您得到的是一个没有私钥的 .cer 文件(证书图标没有密钥),而不是 .pfx 文件,那么该文件仅对以下情况有用: 安装公钥证书 (它会显示在“其他用户”下方),但不能用于签名或身份验证。在这种情况下,您将无法从那里找回私钥,如果您没有其他有效的副本,唯一的选择就是申请新的证书。
这些格式如何在服务器 SSL 证书中使用
在日常使用网络服务器的工作中, VPN无论是使用代理还是 Java 应用程序,所使用的证书格式都取决于系统和安装类型。在 Linux 上安装 Apache 与在 Windows 上安装 IIS 或在 Java 上安装 Tomcat 并不相同。
在 Unix/Linux 环境(Apache、Nginx、HAProxy 等)中,使用以下方式是正常的: PEM文件 单独的文件:一个用于存放私钥(.key),一个用于存放服务器证书(.crt 或 .cer),有时还有一个用于存放中间 CA 字符串。所有这些文件都在服务器配置中被引用,以建立 TLS 连接。
在 Windows 平台(IIS、远程桌面服务等)上,经常会遇到需要提供以下信息的情况: .pfx 或 .p12 其中包含证书、私钥和密钥链。导入向导会自动将每个部分放置到相应的存储位置,因此您无需担心内部细节。
在 Java 环境(Tomcat、具有自身密钥库的应用程序)中,存在以下类型的存储: JKS 或 PKCS#12在许多情况下,可以直接导入 .pfx 文件,或者使用 .p7b 证书来配置密钥库中的信任链,具体取决于工具和 Java 版本。
从第三方提供商处购买 SSL 证书时,您可能会收到各种文件组合:PEM 格式的 CRT + CA 文件、包含字符串的 .p7b 文件,甚至可能是预先准备好的 .pfx 文件。关键在于识别正确的文件类型。 私钥在哪里? (如果它是您随身携带的,而不是由服务器生成的)以及哪个文件包含服务器证书和中间链。
在主机控制面板中,通常会要求您填写证书发布时间 (CRT)、密钥 (KEY) 以及可选的证书颁发机构 (CA) 或中间证书的字段。如果您只有 .pfx 文件,可以使用 OpenSSL 将其转换为 PEM 格式,然后从中提取每个数据块,并仔细地从每种类型的开头到结尾进行复制。
使用 OpenSSL 进行证书格式转换
一旦你了解了每个文件是什么,下一步合乎逻辑的做法就是知道 如何转换它们 当服务器或应用程序请求的格式与您的 ISP 或 CA 提供的格式不同时,标准的工具是 OpenSSL,它在大多数 Linux 发行版中都有提供,也可以安装在 Windows 上。
例如,如果您拥有证书 DER(.der,.cer) 如果需要将其转换为 PEM 格式,只需一条命令即可将该二进制文件重新编码为带有相应头部信息的 Base64 格式。同样,如果您的系统只接受二进制文件,则可以将 PEM 文件转换为 DER 格式。
使用 PKCS#7 (.p7b) 文件,您可以使用 OpenSSL 来 提取证书 使用一个简单的命令,即可将证书保存为 PEM 格式,该命令会打印出证书内容并将其保存到文本文件中。之后,如果需要单独的文件,您可以将不同的 BEGIN/END CERTIFICATE 块分离出来。
对于 PKCS#12(.pfx、.p12)格式的容器,OpenSSL 允许您将其转换为包含私钥和所有证书的 PEM 文件。转换过程中,系统会提示您输入容器密码,您可以根据私钥的预期用途,选择将其加密或以明文形式保留在 PEM 文件中。
这类转换使得诸如将 .pfx 文件上传到 Linux 服务器,将其转换为 PEM 格式,然后……之类的场景成为可能。 分离式 CRT 和 KEY 填写 SSL 安装表单,但该表单不直接支持 PKCS#12 容器。
除了直接进行 DER↔PEM、PEM↔PKCS#7、PKCS#7↔PKCS#12 和 PKCS#12↔PEM 转换之外,该实用程序还可以生成 CSR、管理密钥、检查证书和检查到期日期,使其成为任何使用证书的环境中的基本工具。
数字证书的类型和用途
除了文件格式之外,明确以下内容也很有帮助: 证书类型 根据其用途或所代表的实体类型,其备份、续订和安装的管理方式也会有所不同。
在欧洲监管层面(eIDAS法规),区分了以下两者: “简易”电子证书和合格证书前者满足基本的身份识别和签发要求,而后者则对身份验证流程以及服务提供商的技术和组织条件提出了更严格的要求。西班牙的电子身份证(DNIe)就是一个典型的例子。
如果我们查看持有人是谁,我们就可以得到以下证书: 自然人、法人或不具备法人资格的实体它们分别用于在不同的领域进行签名或认证:个人程序、代表公司进行的交易或税务义务。
在网络服务器领域,最知名的证书系列是…… SSL/TLS 证书这些证书安装在服务器上,用于加密与用户的通信通道。它们包括单域证书、通配符证书和多域 (SAN) 证书等多种类型,这些证书的区别在于它们涵盖的名称数量和验证级别。
无论类型如何,所有这些证书最终都可以以相同的格式存储和分发:.cer、.crt、.pem、.p7b 文件或 .pfx/.p12 容器,具体取决于它们将要使用的系统以及选择传输或备份它们的方法。
数字证书的用途非常广泛: 它们确保保密性和真实性。 在通信方面,它们允许具有法律效力的电子签名,简化行政和商业程序,并使多个网络服务能够安全运行,而无需用户担心加密细节。
至此,很明显,.pfx、.p12、.cer 或 .crt 等扩展名只是对同一事物进行不同形式的打包:X.509 证书、私钥以及(在适用的情况下)信任链,根据环境的不同,它们以 Base64 文本、DER 二进制或 PKCS 容器的形式表示,以便于安装和部署。 系统间的运输.
对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。
