OpenSSL生成的证书文件格式

我在 etcd集群TLS设置 使用Cloudflare 的 cfssl 工具来生成 etcd - 分布式kv存储 集群证书,分别有3中用途证书,每种证书包含3个文件(2种后缀名的文件):

  • .pem

  • .csr

那么这些不同文件的不同后缀名分别代表什么含义,以及什么用途呢?跟着手册做一遍,依然一头雾水,所以我在这里整理OpenSSL生成证书文件格式,以便能够区分和理解这些密钥证书的用途。

SSL标准文件

SSL标准有非常长的历史,并且有各种格式,最终这些格式标准被汇总编成 Abstract Syntax Notation 1 (ASN.1) (抽象语法符号标准1)格式化数据,也就是x509证书所使用的格式:

  • .csr : Certificate Signing Request (证书签名请求),一些应用程序生成 .csr 证书签名请求提交给证书颁发机构(certificate-authorities)。 .csr 文件的实际格式是 RFC 2986 中定义的PKCS10,包含了所请求证书的 部分/全部 关键细节,例如 主题(subject),组织(organization),状态(state),诸如此类,以及要签署的证书的公钥。返回的证书则是公共证书(public certificate),也就是包含公钥但不包含私钥,并且返回的公共证书有多种格式。

  • .pem : 在 RFC 1422(是RFC1421到1424的一部分)定义,这是一种容器格式(container format),可能只包含公共证书(public certificate)。例如Apache安装时,CA证书文件 /etc/ssl/certs ;也可能包含整个证书链(entire certificate chain),即包含公钥(public key)、私钥(private key)以及根证书(root certificates)。但是很不幸,令人迷惑的是, .pem 文件还可能编码了 CSR,因为PKCS10格式可以转换为PEM。 这个名字来自隐私增强邮件(Privacy Enhanced Mail, PEM) ,虽然这是一个失败的安全电子邮件方法,但是使用的容器格式依然存在,并且是 x509 ASN.1 密钥的 base64 转换

  • .key : .key 文件是只包含 私钥 PEM格式文件,这是一种常规名称而不是标准化名称。在Apache安装中,这个文件通常位于 /etc/ssl/private 目录。这个私钥 .pem 文件权限非常重要,如果设置错误,一些程序会拒绝加载这些证书。

  • .pkcs12 / .pfx / .p12 : 最初由 RSA 在公钥加密标准(缩写为 PKCS)中定义,“12”变体最初由 Microsoft 增强,后来作为 RFC 7292 提交。这是一种受密码保护的容器格式,包含公共和私有证书对。与 .pem 文件不同,容器是完全加密的。 Openssl 可以将其转换为带有公钥和私钥的 .pem 文件: openssl pkcs12 -in file-to-convert.p12 -out convert-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 格式文件,Windows Explorer 将其识别为证书,但不会把 .pem 视为证书

参考