SSL 证书格式转换
根据不同服务以及服务的版本,我们需要用到不同的证书和私钥格式,各种格式的证书及私钥遵循的公钥加密标准(Public Key Cryptography Standards, PKCS)和编码方式也各不相同。
常见证书格式
电子证书可以二进制或 Base64 形式存储,常见的文件扩展名有 .cer、.crt、.der 和 .pem。如果把证书和私钥一起存储,则可以使用 PKCS#12(.p12、.pfx)格式。
-
DER:用于二进制 DER 编码的证书,这类证书常见的文件扩展有 .der、.cer、.crt 等。
-
PEM:用于不同类型的 X.509v3 文件,是以
- BEGIN …
前缀的 ASCII(Base64)数据,这类证书常见的文件扩展名有 .der、.cer、.crt 等。 -
CER 和 CRT:几乎同义,证书可以被编码为二进制 DER 或 ASCII PEM。
-
PKCS7 文件:也被称为 P7B,通常用于 Java Keystores 和 Microsoft IIS(Windows)。它们是 ASCII 文件,可以包含证书和 CA 证书。
-
PKCS12 文件:也被称为 PFX 文件,通常用于在 Micrsoft IIS(Windows)中导入和导出证书链。
常见 web 服务使用的证书格式:
-
Tomcat 一般使用 Java 提供的密码库。通过 Java 的 Keytool 工具,生成 Java Keystore(JKS)格式的证书文件。
-
Apache、Nginx 等,使用 OpenSSL 提供的密码库,生成 PEM、CRT 等格式的证书文件。
-
Windows Server 中的 Internet Information Services(IIS),一般使用 PFX 格式的证书文件。
证书转换方法
命令行转换
根据格式转换的需求安装 OpenSSL、Keytool 工具,使用命令进行配置。
说明 |
---|
在执行格式转换的命令前,需要通过证书编码方式、常见文件扩展名区分证书格式,比如 DER 编码的证书是二进制格式,而 PEM 编码的证书是文本格式,内容以 |
具体操作如下:
OpenSSL
-
PEM 和 DER 相互转换(特指编码方式,与文件扩展名无关)
查看 PEM 编码证书:
openssl x509 -in xxx.crt -text -noout
查看 DER 编码证书:
openssl x509 -in xxx.der -inform der -text -noout
格式转换:
openssl x509 -in xxx.pem -outform DER -out xxx.der openssl x509 -in xxx.der -inform DER -outform PEM -out xxx.pem
-
PEM 和 PKCS7 相互转换
说明 PKCS7 文件常常是证书链文件,此文件中可包含多个证书。
格式转换:
openssl crl2pkcs7 -nocrl -certfile xxx.pem -out xxx.p7b openssl pkcs7 -print_certs -in xxx.p7b -out xxx.pem
-
PEM 和 PKCS12 转换
说明 PKCS12 文件中一般包含了证书和私钥,在格式转换时需要将私钥也添加进去,同时还需要输入一个密码。
格式转换:
openssl pkcs12 -export -in xxx.crt -inkey xxx.key -out xxx.pfx PKCS12-->CRT&KEY 1、提取证书: openssl pkcs12 -in xxx.pfx -nokeys -out SERVERNAME.pem 2、提取私钥: openssl pkcs12 -in xxx.pfx -nocerts -out SERVERNAME.key -nodes
Keytool
说明 |
---|
Keytool 使用 Java 提供的密码库,使用此命令需先配置 Java环境。 |
-
JKS 和 PKCS12 转换
说明 和 PKCS12 一样,JKS 也需要输入密码,同时还需要验证 PKCS12 文件的密码。
格式转换:
keytool -importkeystore -srckeystore xxx.pfx -destkeystore xxx.jks -srcstoretype PKCS12 -deststoretype JKS keytool -importkeystore -srckeystore xxx.jks -destkeystore xxx.pfx -srcstoretype JKS -deststoretype PKCS12
将 cert 证书转换为 pem
在云服务器部署 https 业务时,需要填写 SSL 证书的路径,而这个证书需要是 pem 格式的,例如下图:
但是从青云控制台生成的证书,下载之后是 crt 格式的,需要将格式进行转换。
#openssl x509 -outform PEM -in server.crt -pubkey -noout > public_key.pem
转换完成后,将 pem 格式的证书添加到 SSL 的证书路径中,如 ssl_certificate 参数后。