通常CA签发证书后,会发送一份文件后缀是 pem 或 crt 的证书文件,这是DER编码的证书进行Base64编码后的证书文件,如果你用记事本打开证书文件,会发现里面的内容格式如下:
-----BEGIN CERTIFICATE-----
MIIFtzCCBJ+gAwIBAgIRAJ+pKXs2lp0rH8yxH1fGU+EwDQYJKoZIhvcNAQELBQAw
gY8xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
ZvsOTAXYHEF7RTj05ctVYWLlTeLXcX8HRt/q/MmoEES4ksy2TdIakP7AW9653bNC
0KdYkjyfbOlSmO1eOrAYqUCd3LGf+r+ApongTF9GFvfoS8nuR1vlcTzkMGLHj7V+
a9UU5z3b2Y+5Ae75XopG8kRUkTrOWtoi1dEO
-----END CERTIFICATE-----
我们可以把这种编码的SSL证书安装到 apache nginx tomat 等服务器上,但是有些情况下,我们需要转换证书格式,例如安装到IIS 、Exchange 服务器上,我们经常要用到 扩展名为 pfx的证书,安装到tomcat 上 我们可能需要 扩展名 为 jks 或 pfx 的证书
常见的证书文件扩展名
需要注意的是,证书文件的扩展名通常不能表示证书的编码格式,尤其是扩展名为 crt cer der 的,有可能是.Base64编码 的 PEM证书,也有可能是 DER二进制格式,你可能要用记事本打开看一下 ,如果证书是以 -----BEGIN CERTIFICATE----- 开头的, 那就是 PEM编码的, 如果不是那可能是 DER 格式的
pem .crt
pem编码的证书,这是最常见的一种,可以用记事本或其他文本编辑器打开证书文件,看到的代码就是上面的例子,是DER编码的证书进行Base64编码后的证书文件
.cer .der
通常是DER二进制格式的,但是也有可能是Base64编码 ,就是跟上面的pem crt 一样的
.p7b .p7c
PKCS #7通常用于windows 或者JAVA平台,例如 :Internet Information Server (IIS), MS Exchange server, Java Tomcat ,这个证书文件通常包含有 服务器证书(包含域名的证书) 以及相应的证书链(中级证书) ,如果你用文本编辑器打开这个文件 ,会看到是以 —–BEGIN PKCS7—- 开头的,证书不包含私钥
.pfx .p12
PKCS#12 这是包含了服务器证书 和 私钥,可能还包含了证书链的证书文件,安装证书所需要的所有证书和文件都可以包含在1个文件里面,通常用于安装到IIS ,Tomcat 服务上
如何使用OpenSSL转换SSL证书格式?
通常可以用 OpenSSL命令进行SSL证书格式转换 ,这里我列出几种常见的openssl 转换证书命令
1.pem 转换为 der
openssl x509 -in cert.pem -out cert.der -outform DER
另外一种方式转换证书:
如果证书文件扩展名是 crt ,或将pem 扩展名改为 crt ,然后直接双击该证书文件,然后点击“详细信息”->“复制到文件”->"下一页"->选择 "DER编码二进制 x.509(.CER)(D)"->"下一页"-输入文件保存文件名->下一页->完成 ,这样就导出 der编码的证书文件
2. pem 转换为 pfx
openssl pkcs12 -inkey myKey.key -in myCert.pem -export -out myPFXCert.pfx
其中myKey.key 是私钥 , myCert.pem 是PEM编码的SSL证书 , myPFXCert.pfx 是转换后得到的PFX证书
3. pfx 转换为 pem
openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes
转换后得到的 certificate.pem 文件,可以用记事本打开,里面包含证书和私钥代码
4.pem 转换为jks