• 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—–
    
    • 1
    • 2
    • 3
    • 如果存在**——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
    
    • 1

    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"
    
    • 1

    image.png

    3.5、JKS与P12相互转换

    P12转换为JKS

    keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore server.jks
    
    • 1

    JKS转换为P12

    keytool -importkeystore -srckeystore server.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore server.p12
    
    • 1

    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
    • 2
    • 3
    • 4
    • 5
    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
    
    • 1
    • 2
    • 3
    • 4

    3.7、P12证书库导出CER

    keytool -export -alias server -keystore server.p12 -storetype PKCS12 -storepass huawei -rfc -file huawei.cer
    
    • 1

    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 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.9、查看证书库

    keytool -list -keystore client.jks
    
    • 1

    三.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
    
    • 1
    • 2
    • 3
    • 4

    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 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    四、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?# 《安全》

  • 相关阅读:
    哈希表、无序集合、映射的原理与实现
    到底什么是Linux?快进来学习!
    java读取文件
    go语言学习之旅之Go语言数据类型
    Part2_扩展MATSIM_Subpart4_除个人车外的其他模式_第19章 新的基于动态事件的公共交通路由器&第20章 基于矩阵的PT路由器
    测试用例颗粒度说明
    Vue基础:父子组件访问的方式
    python基于PHP+MySQL高校资产管理系统
    基于语音信号识别性别(Matlab代码实现)
    Linux 开源数据库Mysql-10-mysql集群一主一从GTID
  • 原文地址:https://blog.csdn.net/weixin_40304387/article/details/127910039