我负责维护两台 Debian 服务器。每次需要处理安全证书问题时,我都会在 Google 上搜索教程,然后反复尝试,直到成功。
然而,在我的搜索中我经常会遇到不同的文件格式(.key
,,.csr
).pem
,但我从来没有能够找到每个文件格式的用途的很好的解释。
我想知道 ServerFault 这里的优秀人员是否可以对此事提供一些澄清?
答案1
SSL 已经存在了很长时间,你会认为应该存在统一的容器格式。你说得对,确实有。事实上标准太多了。归根结底,所有这些都是不同的编码方式抽象语法符号 1 (ASN.1)以机器可读的方式格式化数据(恰好是 x509 证书定义的格式)。
- .csr- 这是证书签名请求。某些应用程序可以生成这些文件以提交给证书颁发机构。实际格式为 PKCS10,定义在RFC 2986。它包括所请求证书的部分/全部关键详细信息,例如主题、组织、州、其他内容,以及公钥证书的签名。这些证书由 CA 签名并返回证书。返回的证书是公共的证书(包括公钥但不包括私钥),其本身可以有几种格式。
- .pem- 在 RFC 中定义1422(来自系列文章的一部分1421通过1424) 这是一种容器格式,可能仅包含公共证书(例如 Apache 安装和 CA 证书文件
/etc/ssl/certs
),也可能包含整个证书链,包括公钥、私钥和根证书。令人困惑的是,它还可以编码 CSR(例如这里),因为 PKCS10 格式可以转换为 PEM。名称来自隐私增强邮件 (PEM),一种失败的安全电子邮件方法,但它使用的容器格式仍然存在,并且是 x509 ASN.1 密钥的 base64 转换。 - 。钥匙- 这是一个(通常)PEM 格式的文件,仅包含特定证书的私钥,并且只是一个常规名称,而不是标准名称。在 Apache 安装中,它通常位于 中
/etc/ssl/private
。这些文件的权限非常重要,如果设置错误,某些程序将拒绝加载这些证书。 - .pkcs12 .pfx .p12- 最初由 RSA 在公钥加密标准(缩写为 PKCS),“12”变体最初由微软增强,后来提交为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 格式的文件。例如... - 证书 .cer .crt- 具有不同扩展名的 .pem(或很少为 .der)格式的文件,Windows 资源管理器会将其识别为证书,而 .pem 则不能。
- .p7b .密钥库- 定义于RFC 2315作为 PKCS 编号 7,这是 Windows 用于证书交换的格式。Java 本身理解这些,并且经常用作
.keystore
扩展。与 .pem 样式证书不同,此格式具有定义包含认证路径证书的方式。 - .crl- 证书撤销列表。证书颁发机构制作这些列表是为了在证书到期前取消授权。您有时可以从 CA 网站下载它们。
概括而言,有四种不同的方式来呈现证书及其组件:
- 质子交换膜- 受 RFC 约束,开源软件优先使用,因为它是基于文本的,因此不易出现翻译/传输错误。它可以有多种扩展名(.pem、.key、.cer、.cert 等)
- PKCS7- Java 使用并受 Windows 支持的开放标准。不包含私钥材料。
- PKCS12- 微软的私有标准,后来在 RFC 中定义,与纯文本 PEM 格式相比,它提供了增强的安全性。它可以包含私钥和证书链材料。它优先由 Windows 系统使用,并且可以通过使用 openssl 自由转换为 PEM 格式。
- 分布式能源- PEM 的父格式。将其视为 base64 编码 PEM 文件的二进制版本很有用。在 Windows 之外,通常不怎么使用。
我希望这有帮助。
答案2
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 标准的详细信息。
答案3
有时.crt
文件已经是.pem
。请参阅:https://stackoverflow.com/questions/991758/openssl-pem-key