知识库

如何使用 OpenSSL 将证书转换为不同格式

不同的服务器和控制面板可能需要不同文件格式的 SSL 证书。为了将证书从一种格式转换为另一种格式,您可以使用通常在 Linux 机器上可用的 OpenSSL 软件包。

事实上,我们提供的证书是以 x.509 格式发放的,这是 ASN.1 文件编码标准的版本。在本文中,我们将讨论根据编码规则而有所不同的文件格式。

总的来说,我们可以区分以下证书文件格式:

1) PEM 是一种 base64 编码的证书,放置在 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 标头之间。它是最广泛使用的证书格式,主要用于基于 Linux 的服务器,如 Apache、Nginx,以及大多数网络托管控制面板(cPanel、Plesk、DirectAdmin、WebMin 等)。PEM 证书的文件扩展名可能为:*.pem, *.crt, *.cer。如果在证书激活期间选择除 'Microsoft Internet Information Server'(Microsoft IIS)之外的任何服务器类型,COMODO CA 将以 PEM 格式发送其证书。

2) PKCS#7 是另一种用于 Base64 编码的证书,通常由 Windows 和 Java 基于 Tomcat 的服务器使用,并可以包含域端实体证书和 CA 链证书。如果您在文本编辑器中打开 PKCS#7 文件,可以看到在 -----BEGIN PKCS7----- 和 -----END PKCS7----- 卷标之间的编码文本。最常见的扩展名为:*.p7b, *.p7s, *.cer。如果在证书激活期间选择 'Microsoft Internet Information Server' 作为服务器类型,可以从 COMODO 获得 PKCS#7 格式的证书。

3) PKCS#12/PFX 是一种二进制格式的文件,包含证书及其对应的私钥,并受到密码保护。可选地,该文件还可以包括 CA 链证书。通常,PFX 证书用于 Windows 机器,是将证书从一个 Windows 服务器转移到另一个的必要条件。文件扩展名为:*.p12 和 *.pfx.

要将证书转换为不同的格式,您可以使用以下命令:

从 PEM 转换为 PKCS#7

openssl crl2pkcs7 -nocrl -certfile your_pem_certificate.crt -out your_pkcs7_certificate.p7b -certfile CA-bundle.crt

从 PKCS#7 转换为 PEM

openssl pkcs7 -print_certs -in your_pkcs7_certificate.p7b -out your_pem_certificates.pem

如果 PKCS#7 文件包含链证书,新生成的 .pem 文件也将包括它们,分开存放。

从 PEM 转换为 PFX

openssl pkcs12 -export -out your_pfx_certificate.pfx -inkey your_private.key -in your_pem_certificate.crt -certfile CA-bundle.crt

您也将被要求指定 PFX 文件的密码。请确保您记住密码,因为在需要将 PFX 汇入新服务器时会用到它。

从 PFX 转换为 PEM

openssl pkcs12 -in your_pfx_certificate.pfx -out your_pem_certificates_and_key.pem -nodes

系统会要求您输入转换时使用的 PFX 文件的密码。所获得的 PEM 文件将包含证书、链证书(可选)和私钥。

从 PKCS#7 转换为 PFX

要将证书从 PKCS#7 转换为 PFX,应首先将证书转换为 PEM:

openssl pkcs7 -print_certs -in your_pkcs7_certificate.p7b -out your_pem_certificates.pem

之后,可以将证书转换为 PFX:

openssl pkcs12 -export -out your_pfx_certificate.pfx -inkey your_private.key -in your_pem_certificate.crt

或者,也可以使用在线工具转换证书。