SSL 已经存在了很长时间,您会认为容器格式会达成一致。你是对的,有。太多的标准,因为它发生。最后,所有这些都是以机器可读的方式对抽象语法符号 1 (ASN.1)格式化数据进行编码的不同方式——这恰好是定义 x509 证书的格式。
- .csr - 这是一个证书签名请求。一些应用程序可以生成这些以提交给证书颁发机构。实际格式是RFC 2986中定义的 PKCS10 。它包括所请求证书的部分/全部关键细节,例如主题、组织、状态、诸如此类,以及要签署的证书的公钥。这些由 CA 签名并返回证书。返回的证书是公共证书(包括公钥但不包括私钥),它本身可以有多种格式。
-
.pem - 在 RFC 1422 ( 1421到1424系列的一部分)中定义,这是一种容器格式,可能仅包括公共证书(例如 Apache 安装和 CA 证书文件
/etc/ssl/certs
),或者可能包括整个证书链,包括公钥、私钥和根证书。令人困惑的是,它也可能对 CSR 进行编码(例如,此处使用的),因为 PKCS10 格式可以转换为 PEM。该名称来自Privacy Enhanced Mail (PEM),这是一种失败的安全电子邮件方法,但它使用的容器格式仍然存在,并且是 x509 ASN.1 密钥的 base64 转换。 -
.key - 这是(通常)PEM 格式的文件,仅包含特定证书的私钥,只是一个常规名称,而不是标准化名称。在 Apache 安装中,这通常位于
/etc/ssl/private
. 这些文件的权限非常重要,如果设置错误,有些程序会拒绝加载这些证书。 -
.pkcs12 .pfx .p12 - 最初由 RSA 在公钥加密标准(缩写为 PKCS)中定义,“12”变体最初由 Microsoft 增强,后来作为RFC 7292提交。这是一种受密码保护的容器格式,包含公共和私有证书对。与 .pem 文件不同,此容器是完全加密的。Openssl 可以将其转换为带有公钥和私钥的 .pem 文件:
openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes
不时出现的其他一些格式:
-
.der - 一种以二进制编码 ASN.1 语法的方法,.pem 文件只是 Base64 编码的 .der 文件。OpenSSL 可以将这些转换为 .pem (
openssl x509 -inform der -in to-convert.der -out converted.pem
)。Windows 将这些视为证书文件。默认情况下,Windows 会将证书导出为具有不同扩展名的 .DER 格式文件。喜欢... - .cert .cer .crt - 具有不同扩展名的 .pem(或很少是 .der)格式的文件,Windows Explorer 将其识别为证书,而 .pem 不是。
-
.p7b .keystore - 在RFC 2315中定义为 PKCS 编号 7,这是 Windows 用于证书交换的格式。Java 本身就理解这些,并且经常将
.keystore
其用作扩展。与 .pem 样式的证书不同,此格式具有包含证书路径证书的定义方式。 - .crl - 证书吊销列表。证书颁发机构产生这些作为在到期前取消授权证书的一种方式。您有时可以从 CA 网站下载它们。
总之,有四种不同的方式来展示证书及其组成部分:
PEM - 由 RFC 管理,开源软件优先使用,因为它是基于文本的,因此不太容易出现翻译/传输错误。它可以有多种扩展名(.pem、.key、.cer、.cert 等)
PKCS7 - Java 使用并受 Windows 支持的开放标准。不包含私钥材料。
PKCS12 - 后来在 RFC 中定义的 Microsoft 私有标准,与纯文本 PEM 格式相比,它提供了增强的安全性。这可以包含私钥和证书链材料。Windows系统优先使用,可通过openssl自由转换为PEM格式。
DER - PEM 的父格式。将其视为 base64 编码的 PEM 文件的二进制版本很有用。在 Windows 之外不经常使用。
我希望这有帮助。
PEM 本身不是证书,它只是一种编码数据的方式。X.509 证书是一种通常使用 PEM 编码的数据类型。
PEM 是 X.509 证书(其结构使用 ASN.1 定义),使用 ASN.1 DER(可区分编码规则)编码,然后通过 Base64 编码运行并停留在纯文本锚线(BEGIN CERTIFICATE 和 END CERTIFICATE )。
您可以使用 PKCS#7 或 PKCS#12 表示法来表示相同的数据,并且可以使用 openssl 命令行实用程序来执行此操作。
PEM 的明显好处是可以安全地粘贴到电子邮件正文中,因为它有锚线并且是 7 位干净的。
RFC1422有更多关于 PEM 标准的详细信息,因为它与密钥和证书相关。
网友评论