几种不同的证书编码格式

认识几种不同编码格式的X509证书,及使用openssl相互转换

介绍

通常来说, 所有 SSL 证书都被视为 X.509 证书的类型. 这些数字证书具有不同的文件扩展名和格式.

分类

  • Base64 (ASCII)

    • PEM: 由 RFC 管理, 开源软件优先使用, 因为它是基于文本的, 因此不太容易出现翻译/传输错误. 可以有多种扩展名(.pem、.key、.cer、.cert 等)
      • .pem
      • .crt
      • .ca-bundle
    • PKCS#7: Java 使用并受 Windows 支持的开放标准. 不包含私钥内容.
      • .p7b
      • .p7s
      • .p7c
  • Binary

    • DER: PEM 的父格式, 可以将其视为 base64 编码的 PEM 文件的二进制版本. 在 Windows 之外不经常使用.
      • .der
      • .cer
    • PKCS#12: 一种 Microsoft 私有标准, 后被纳入 RFC, 与纯文本 PEM 格式相比, 安全性得到增强. 可以包含私钥和证书链内容. Windows 系统优先使用, 可通过 openssl 自由转换为PEM格式.
      • .pfx
      • .p12

单独说明

  • PEM 格式: 查看什么是PEM文件
  • P7B/PKCS#7 格式: P7B/PKCS#7 格式的证书以 Base64 ASCII 编码进行编码, 它们通常具有 .p7b.p7c 作为文件扩展名. 将 PKCS#7 格式的证书分开的原因在于, 只有证书才能以这种格式存储, 而私钥则不能. 换句话说, 一个 P7B 文件将只包含证书和链证书.

    具有 P7B/PKCS#7 格式的证书包含在"--BEGIN PKCS7--"和"--END PKCS7--"语句之间. Microsoft WindowsJava Tomcat 是使用这种格式的 SSL 证书的最常见平台.

  • DER 格式: DER 证书格式代表 distinguished encoding rules, 是 PEM 格式证书的二进制形式. DER 格式可以包含所有类型的证书和私钥, 大多使用 .cer.der 扩展名. DER 证书格式最常用于基于 Java 的平台.
  • PFX/P12/PKCS#12 格式: 是一种受密码保护的容器格式, 包含公共和私有证书对. 和 .pem 文件不同, 这个容器是完全加密的.PFX/P12/PKCS#12 格式 —— 都是指个人信息交换格式 —— 是存储服务器证书的二进制格式. 这些文件通常在 Windows 平台上使用,用来导入和导出证书及私钥.

不同格式的转换

因为以下两个原因, 存在不同编码格式证书的互相转换需求:

  • 不同证书颁发机构以不同的格式颁发证书
  • 不同的服务器需要不同格式的证书

不同格式间的转换, 请查看: openssl-toolkit使用

其他

一些名词的解释:

  • SSL: Secure Socket Layer 安全套接字层
  • TLS: Transport Layer Security 传输层安全协议
  • CSR: Certificate Signing Request 证书签名请求, 实际格式是 RFC 2986 中定义的 PKCS10, 它包括所请求证书的部分/全部关键细节, 例如subject, organization, state诸如此类, 以及要签署的证书的公钥. 这些由 CA 签名并返回证书, 返回的证书是公共证书(包括公钥但不包括私钥),返回的证书可以有多种格式.
  • key: 这是一个(通常)PEM 格式的文件, 仅包含特定证书的私钥, 并且只是一个惯用名称, 而不是标准化名称. 安装 apache 相关软件时, 通常可以在 /etc/ssl/private 中找到. 这些文件的权限非常重要, 如果设置错误, 有些程序会拒绝加载这些证书.
  • PKCS: Public-Key Cryptography Standards 公钥密码标准
  • CRL: certificate revocation list 证书吊销清单, 证书颁发机构生成这些内容作为证书到期前, 取消授权证书的一种方式.

本文内容参考自:

updatedupdated2022-03-222022-03-22