PEM格式的证书文件(*.pem)由Base64编码的二进制内容和开头行(-----BEGIN CERTIFICATE-----)、结束行(-----END CERTIFICATE-----)组成,支持使用EditPlus等文本编辑器打开。本文介绍了将不同格式的HTTPS证书转换为PEM格式的方法。
一、证书文件格式
以下表格介绍了文件的常见格式,您可以参考以下表格区分带有后缀扩展名的证书文件。
文件后缀 | 文件类型 | 说明 |
---|---|---|
.DER或.CER | 二进制格式 | 只含有证书信息,不包含私钥。 |
*.CRT | 二进制格式或 | |
文本格式 | 只含有证书信息,不包含私钥。 | |
*.PEM | 文本格式 | 一般存放证书或私钥,或同时包含证书和私钥。.PEM文件如果只包含私钥,一般用.KEY文件代替。 |
.PFX或.P12 | 二进制格式 | 同时包含证书和私钥,且一般有密码保护。 |
*.JKS | 二进制格式 | 同时包含证书和私钥,一般有密码保护。 |
说明 证书格式之间是可以互相转化的。具体操作,请参见如何转换证书格式?。
您可以使用记事本直接打开证书文件。如果显示的是规则的数字字母(如下所示内容),那么该证书文件是文本格式。
—–BEGIN CERTIFICATE—–
MIIE5zCCA8+gAwIBAgIQN+whYc2BgzAogau0dc3PtzANBgkqh......
—–END CERTIFICATE—–
- 如果存在**——BEGIN CERTIFICATE——**,则说明这是一个证书文件。
- 如果存在**—–BEGIN RSA PRIVATE KEY—–**,则说明这是一个私钥文件。
二、常见Web服务软件
常见的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格式的证书文件。
三、证书转换
3.1、CER或CRT格式证书转换为PEM格式
对于CER或CRT格式的证书,您可通过直接修改证书文件扩展名的方式,将其转换成PEM格式。例如,将server.crt证书文件重命名为server.pem即可。
openssl x509 -in cert2.cer -out cert2.pem -outform PEM
3.2、DER格式证书转换为PEM格式
DER格式证书一般出现在Java平台中,您可使用OpenSSL工具将其转化为PEM格式。通过执行以下两条OpenSSL命令,DER格式证书转换为PEM格式。
- 提取公钥文件的命令:openssl x509 -inform der -in certificate.der -out certificate.pem
- 说明:certificate.der为DER格式的证书,certificate.pem为转换后的PEM格式证书。具体文件以实际环境为准。
- 只提取私钥文件的命令:openssl rsa -inform DER -outform PEM -in privatekey.der -out privatekey.pem
- 说明:privatekey.der为DER格式的证书,privatekey.pem为转换后的PEM格式证书。具体文件以实际环境为准。
3.3、PEM格式转换为JKS
使用KeyTools工具:
命令行: keytool -import -file riemann_certificate.pem -keystore truststore.jks
3.4、CRT格式转换为PKCS12格式的证书文件(p12证书)
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name "server"
3.5、JKS与P12相互转换
P12转换为JKS
keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore server.jks
JKS转换为P12
keytool -importkeystore -srckeystore server.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore server.p12
3.6、JKS与PEM转换
这里可能是上面方法的整合,但为了方便以后开发,还是整合好堆积起来比较美。
- JKS——>PEM
JSK转换为PEM需要先,JKS–>P12–>PEM
//jks--->p12[需要注意这里必须add -alias keyOwnerAlias 否则会报错]
keytool -importkeystore -srckeystore sert.jks -destkeystore sert.p12 -srcstoretype jks -deststoretype pkcs12 -alias keyOwnerAlias
//p12--->pem
openssl pkcs12 -in sert.p12 -out sert.pem
- PEM——>JKS
PEM转换为JKS,需要先PEM—>PFX—->JKS
//PEM--->PFX
openssl pkcs12 -export -out test.pfx -inkey test.key -in test.pem
//PFX--->JKS
keytool -importkeystore -srckeystore test.pfx -destkeystore test.jks -srcstoretype PKCS12 -deststoretype JKS
3.7、P12证书库导出CER
keytool -export -alias server -keystore server.p12 -storetype PKCS12 -storepass huawei -rfc -file huawei.cer
3.8、证书库JKS,添加为一个信任证书CER/PEM
# 导出CER
keytool -import -v -file server.cer -keystore client.jks
# 导出PEM
openssl pkcs12 -in server.p12 -out server.pem -nokeys
3.9、查看证书库
keytool -list -keystore client.jks
三.keystore文件和.jks文件的区别及相互转换
keystore 是 Eclipse 生成的签名文件;
JKS 是 Android studio 生成的签名文件;
二者功能没啥大区别,可以转换;
JKS—–>KEYSTORE
//JKS--->P12
keytool -importkeystore -srckeystore D:\test.keystore -srcstoretype JKS -deststoretype PKCS12 -destkeystore test1.p12
//P12---->KEYSTORE
keytool -v -importkeystore -srckeystore D:\test.p12 -srcstoretype PKCS12 -destkeystore D:\test.keystore -deststoretype JKS
KEYSTORE——>JKS
//keystore--->crt
keytool -export -alias test -file D:\test.crt -keystore D:\test.keystore
//CRT-->CER
openssl x509 -inform pem -in test.crt -outform der -out test.cer
//CER--->JKS
keytool -import -v -alias test -file test.cer -keystore test.jks -storepass 123456 -noprompt
四、key store 与 trust store 区别
- keystore是存储密钥(公钥、私钥)的容器。
- keystore和truststore其本质都是keystore。只不过二者存放的密钥所有者不同而已。本质都是相同的文件,只不过约定通过文件名称区分类型以及用途
- 对于keystore一般存储自己的私钥和公钥,而truststore则用来存储自己信任的对象的公钥。
- truststore中保存的是一些可信任的证书,主要是java在代码中访问某个https的时候对被访问者进行认证的,以确保其实可信任的。
- truststore是必须的,如果我们没有显式的指定,那么java会默认指定为$JAVA_HOME/lib/security/cacerts 这个文件。
更多内容关注微信公众号 ”前后端技术精选“,或者语雀,里面有更多知识:https://www.yuque.com/riverzmm/uu60c9?# 《安全》> 更多内容关注微信公众号 ”前后端技术精选“,或者语雀,里面有更多知识:https://www.yuque.com/riverzmm/uu60c9?# 《安全》> 更多内容关注微信公众号 ”前后端技术精选“,或者语雀,里面有更多知识:https://www.yuque.com/riverzmm/uu60c9?# 《安全》> 更多内容关注微信公众号 ”前后端技术精选“,或者语雀,里面有更多知识:https://www.yuque.com/riverzmm/uu60c9?# 《安全》> 更多内容关注微信公众号 ”前后端技术精选“,或者语雀,里面有更多知识:https://www.yuque.com/riverzmm/uu60c9?# 《安全》> 更多内容关注微信公众号 ”前后端技术精选“,或者语雀,里面有更多知识:https://www.yuque.com/riverzmm/uu60c9?# 《安全》