主流数字证书都有哪些格式?

阿里云文档https://help.aliyun.com/knowledge_detail/42214.html?spm=5176.2020520163.cas.60.39c22b7aorAVVy

一般来说,主流的Web服务软件,通常都基于OpenSSL和Java两种基础密码库。

  • Tomcat、Weblogic、JBoss等Web服务软件,一般使用Java提供的密码库。通过Java Development Kit (JDK)工具包中的Keytool工具,生成Java Keystore(JKS)格式的证书文件。
  • Apache、Nginx等Web服务软件,一般使用OpenSSL工具提供的密码库,生成PEM、KEY、CRT等格式的证书文件。
  • IBM的Web服务产品,如Websphere、IBM Http Server(IHS)等,一般使用IBM产品自带的iKeyman工具,生成KDB格式的证书文件。
  • 微软Windows Server中的Internet Information Services(IIS)服务,使用Windows自带的证书库生成PFX格式的证书文件。

如何判断证书文件是文本格式还是二进制格式?

您可以使用以下方法简单区分带有后缀扩展名的证书文件:

  • *.DER或*.CER文件: 这样的证书文件是二进制格式,只含有证书信息,不包含私钥。
  • *.CRT文件: 这样的证书文件可以是二进制格式,也可以是文本格式,一般均为文本格式,功能与 *.DER及*.CER证书文件相同。
  • *.PEM文件: 这样的证书文件一般是文本格式,可以存放证书或私钥,或者两者都包含。 *.PEM 文件如果只包含私钥,一般用*.KEY文件代替。
  • *.PFX或*.P12文件: 这样的证书文件是二进制格式,同时包含证书和私钥,且一般有密码保护。

您也可以使用记事本直接打开证书文件。如果显示的是规则的数字字母,例如:

—–BEGIN CERTIFICATE—–
MIIE5zCCA8+gAwIBAgIQN+whYc2BgzAogau0dc3PtzANBgkqh......
—–END CERTIFICATE—–

那么,该证书文件是文本格式的。

  • 如果存在——BEGIN CERTIFICATE——,则说明这是一个证书文件。
  • 如果存在—–BEGIN RSA PRIVATE KEY—–,则说明这是一个私钥文件。

 

证书格式转换

以下证书格式之间是可以互相转换的。 

主流数字证书都有哪些格式?

您可使用以下方式实现证书格式之间的转换:

将JKS格式证书转换成PFX格式

您可以使用JDK中自带的Keytool工具,将JKS格式证书文件转换成PFX格式。例如,您可以执行以下命令将 server.jks证书文件转换成 server.pfx证书文件:

keytool -importkeystore -srckeystore D:\server.jks -destkeystore D:\server.pfx
        -srcstoretype JKS -deststoretype PKCS12

将PFX格式证书转换为JKS格式

您可以使用JDK中自带的Keytool工具,将PFX格式证书文件转换成JKS格式。例如,您可以执行以下命令将 server.pfx证书文件转换成 server.jks证书文件:

keytool -importkeystore -srckeystore D:\server.pfx -destkeystore D:\server.jks
        -srcstoretype PKCS12 -deststoretype JKS

 将PEM/KEY/CRT格式证书转换为PFX格式

您可以使用 OpenSSL工具,将KEY格式**文件和CRT格式公钥文件转换成PFX格式证书文件。例如,将您的KEY格式**文件(server.key)和CRT格式公钥文件(server.crt)拷贝至OpenSSL工具安装目录,使用OpenSSL工具执行以下命令将证书转换成 server.pfx证书文件:

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

将PFX转换为PEM/KEY/CRT

您可以使用 OpenSSL工具,将PFX格式证书文件转化为KEY格式**文件和CRT格式公钥文件。例如,将您的PFX格式证书文件拷贝至OpenSSL安装目录,使用OpenSSL工具执行以下命令将证书转换成server.pem证书文件KEY格式**文件(server.key)和CRT格式公钥文件(server.crt):

openssl pkcs12 -in server.pfx -nodes -out server.pem
openssl rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt
说明
此转换步骤是专用于通过Keytool工具生成私钥和CSR申请证书文件的,并且通过此方法您可以在获取到PEM格式证书公钥的情况下分离私钥。在您实际部署数字证书时,请使用通过此转换步骤分离出来的私钥和您申请得到的公钥证书匹配进行部署。

PS:

crt、key以及pem的区别以及生成

crt — Alternate synonymous most common among *nix systems .pem (pubkey).
csr — Certficate Signing Requests (synonymous most common among *nix systems).
cer — Microsoft alternate form of .crt, you can use MS to convert .crt to .cer (DER encoded .cer, or base64[PEM] encoded cer).
pem = The PEM extension is used for different types of X.509v3 files which contain ASCII (Base64) armored data prefixed with a «—– BEGIN …» line. These files may also bear the cer or the crt extension.
der — The DER extension is used for binary DER encoded certificates.

证书(Certificate) .cer .crt 
私钥(Private Key).key 
证书签名请求(Certificate sign request) .csr 
至于pem和der,是编码方式,以上三类均可以使用这两种编码方式,因此.pem和.der(少见)不一定是以上三种(Cert,Key,CSR)中的某一种

PEM - Privacy Enhanced Mail,打开看文本格式,以”—–BEGIN…”开头, “—–END…”结尾,内容是BASE64编码. 
查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout 
Apache和*NIX服务器偏向于使用这种编码格式.

DER - Distinguished Encoding Rules,打开看是二进制格式,不可读. 
查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout 
Java和Windows服务器偏向于使用这种编码格式.