1. 什么是 OpenSSL

  • OpenSSL 是一个非常有用的开源命令行工具包,用于处理 X.509 证书、证书签名请求 (CSR) 和加密密钥。如果您使用的是 Linux 或 macOS 等 UNIX 变体,则您的计算机上可能已经安装了 OpenSSL。如果您想在 Windows 上使用 OpenSSL,您可以启用 Windows 10 的 Linux 子系统或安装 Cygwin。
  • 证书和密钥的两种主要编码方案:PEM(Base64 ASCII)和 DER(二进制)。还有其他扩展名 例如.crt、.cer、.pem 或.der.
  • PEM、PFX、DER、CRT 和 CER:X.509 编码和如何转换

1.1. PEM

  • PEM(最初是“隐私增强邮件”)是 X.509 证书、CSR 和加密密钥的最常见格式。PEM 文件是一个文本文件,其中包含一个或多个采用 Base64 ASCII 编码的项目,每个项目都有纯文本的页眉和页脚(例如和)。单个 PEM 文件可以包含一个最终实体证书、一个私钥或多个证书,形成完整的信任链。从 SSL.com 下载的大多数证书文件都是 PEM 格式。-----BEGIN CERTIFICATE----------END CERTIFICATE-----

  • PEM 文件通常带有扩展名.crt、.pem、.cer 和.key(用于私钥),但您也可能会看到它们具有不同的扩展名。例如,证书订单中下载表中提供的 SSL.com CA 捆绑文件具有扩展名.ca-bundle.

1.1.1. 常见的 PEM 转换

在下面的 OpenSSL 命令中,将所有大写的文件名替换为您正在使用的实际路径和文件名。

1.1.2. 查看 PEM 证书文件的内容

openssl x509 -in CERTIFICATE.pem -text -noout

1.1.3. 将 PEM 证书转换为 DER

openssl x509 -outform der -in CERTIFICATE.pem -out CERTIFICATE.der

1.1.4. 将带有信任链的 PEM 证书转换为 PKCS#7

  • PKCS#7(也称为 P7B)是一种数字证书的容器格式,最常见于 Windows 和 Java 服务器上下文中,通常具有扩展名.p7b. PKCS#7 文件不用于存储私钥。在下面的示例中,-certfile MORE.pem 表示具有链接的中间证书和根证书的文件(例如.ca-bundle 从 SSL.com 下载的文件)
openssl crl2pkcs7 -nocrl -certfile CERTIFICATE.pem -certfile MORE.pem -out CERTIFICATE.p7b

1.1.5. 将带有信任链和私钥的 PEM 证书转换为 PKCS#12

  • PKCS#12(也称为 PKCS12 或 PFX)是一种常见的二进制格式,用于将证书链和私钥存储在单个可加密文件中,通常具有文件扩展名.p12 或.pfx. 在下面的示例中,-certfile MORE.pem 添加带有链式中间证书和根证书的文件(例如.ca-bundle 从 SSL.com 下载的文件),并添加(最终实体证书)-inkey PRIVATEKEY.key 的私钥。有关所示命令的更详细说明,CERTIFICATE.crt 请参阅此操作指南。
openssl pkcs12 -export -out CERTIFICATE.pfx -inkey PRIVATEKEY.key -in CERTIFICATE.crt -certfile MORE.crt
  • 执行上述命令后,系统将提示您创建密码以保护 PKCS#12 文件。记住这个密码。您将需要它来访问存储在文件中的任何证书和密钥。

1.2. DER

  • DER(可分辨编码规则)是 X.509 证书和私钥的二进制编码。与 PEM 不同,DER 编码文件不包含纯文本语句,例如-----BEGIN CERTIFICATE-----. DER 文件最常见于 Java 上下文中。
  • DER 编码的文件通常带有扩展名.der 和.cer.

  • 常见的 DER 转换

  • 在下面的 OpenSSL 命令中,将所有大写的文件名替换为您正在使用的实际路径和文件名。

1.2.1. 查看 DER 编码的证书文件的内容

openssl x509 -inform der -in CERTIFICATE.der -text -noout

1.2.2. 将 DER 编码的证书转换为 PEM

openssl x509 -inform der -in CERTIFICATE.der -out CERTIFICATE.pem

1.3. PEM (.pem, .crt, .cer) to PFX

  • PKCS#12 或 PFX 格式是一种二进制格式,通常用于将信任链的所有元素(例如服务器证书、任何中间证书和私钥)存储到单个可加密文件中。PFX 文件的扩展名通常为 .pfx 和 .p12。PFX 文件通常在 Windows 和 macOS 机器上用于导入和导出证书和私钥。
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile more.crt
  • openssl– 执行 OpenSSL 的命令
  • pkcs12– OpenSSL 中 PKCS#12 文件的文件实用程序
  • export -out certificate.pfx – 将 PFX 文件导出并保存为 certificate.pfx
  • inkey privateKey.key– 使用私钥文件 privateKey.key 作为私钥与证书结合。
  • in certificate.crt– 使用 certificate.crt 作为私钥将与之组合的证书。
  • certfile more.crt– 这是可选的,如果您想在 PFX 文件中包含任何其他证书。

  • [⚠️] 入命令后,系统会提示您输入并验证导出密码以保护 PFX 文件。记住这个密码! 当您希望导出证书和密钥时,您将需要它。

1.4. PKCS#7/P7B (.p7b, .p7c) 到 PFX

  • P7B 文件不能用于直接创建 PFX 文件。P7B 文件必须转换为 PEM。转换为 PEM 后,请按照上述步骤从 PEM 文件创建 PFX 文件。
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.crt
  • openssl– 执行 OpenSSL 的命令
  • pkcs7– OpenSSL 中 PKCS#7 文件的文件实用程序
  • print_certs -in certificate.p7b– 打印出文件中包含的任何证书或 CRL。
  • out certificate.crt– 将文件输出为 certificate.crt

1.5. PFX 转 PEM

1.5.1. 将 PFX 文件转换为同时包含证书和私钥的 PEM 文件

openssl pkcs12 -in filename.pfx -out cert.pem -nodes
  • openssl– 执行 OpenSSL 的命令
  • pkcs12 OpenSSL 中 PKCS#12 文件的文件实用程序
  • -in filename.pfx pfx 证书
  • -out cert.pem -nodes 输出 pem 证书 包含 公私钥

1.5.2. 第二种情况:将 PFX 文件转换为单独的公钥和私钥 PEM 文件:

  • 将私钥从 PFX 提取到 PEM 文件:
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • 导出证书(仅包括公钥):
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • 从提取的私钥中删除密码(可选):
openssl rsa -in key.pem -out server.key

results matching ""

    No results matching ""