04-HTTPS证书格式及转换

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
image.png

3.4、CRT格式转换为PKCS12格式的证书文件(p12证书)

openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name "server"

image.png

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转换

这里可能是上面方法的整合,但为了方便以后开发,还是整合好堆积起来比较美。

  1. 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
  1. 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 区别

  1. keystore是存储密钥(公钥、私钥)的容器
  2. keystore和truststore其本质都是keystore。只不过二者存放的密钥所有者不同而已。本质都是相同的文件,只不过约定通过文件名称区分类型以及用途
  3. 对于keystore一般存储自己的私钥和公钥,而truststore则用来存储自己信任的对象的公钥。
  4. truststore中保存的是一些可信任的证书,主要是java在代码中访问某个https的时候对被访问者进行认证的,以确保其实可信任的。
  5. 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?# 《安全》

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值