一些常用的密钥证书转换命令收集

最近的项目工作中使用到了比较多的证书,私钥转换命令。用来满足不同场景下对不同格式密钥的需求。现在整理一下,供以后项目参考

场景一,P7B格式证书的转换

p7b是#PKCS7证书的格式,特点是有一个完整的证书链,从根证书到应用层证书。一般的大厂会有自己的PKI系统,PKI发布出来的证书通常都是这个p7b格式的。p7b格式不够直观,Java的keytool也不支持对其导入,因此我们将它转换成常见的cer / pem格式

openssl pkcs7 -print_certs -in mine.certs.chain.p7b -out mine.certs.chain.cer
openssl pkcs7 -print_certs -in mine.certs.chain.p7b -out mine.certs.chain.pem

目录下会生成一份cer / pem格式的证书文件。打开就是一份份切分好的证书合集,从根证书到应用层证书,一目了然。在Windows环境下,cer格式证书可以直接导入到系统证书管理器中。方便的成为系统信任的根证书。

场景二,PFX 转换为 PEM

这是一种个人信息交换(#PKCS12)格式,后缀名也可以是p12,是一种包含私钥和证书的合体文件,并且通常有密码进行保护,可以直接导入到操作系统中。
提取私钥:

openssl pkcs12 -in mine.pfx -nocerts -out key.pem -nodes

提取证书:

openssl pkcs12 -in mine.pfx -nokeys -out cert.pem

场景三,Java Keystore / Truststore 转换

搞Java开发免不了使用JDK自己的密钥管理标准。Java自带的keytool工具是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。

在Java中,有Keystore来存储个人信息交换(Keystore / #PKCS12),信任库(Truststore)。尤其是在TLS,签名,加密的场景下,对自签名的证书都需要添加到JDK的信任库中。

JDK/JRE默认的Truststore存放位置为:

$JAVA_HOME/jre/lib/security

以我们从PKI发布给我们的p7b证书为例,我们在转换成cer格式之后,执行如下的命令,就能导入到JDK信任链中,命令会让你输入cacerts信任库密码,默认为changeit

cd $JAVA_HOME/jre/lib/security
keytool -import -alias mine_trust_chain -keystore cacerts -file mine.certs.chain.cer

添加完之后可以查看存在的信任库

cd $JAVA_HOME/jre/lib/security
echo 'changeit' | keytool -list -rfc -keystore cacerts

也可以导出信任库所有信任链信息到文本文件

keytool -list -v -keystore cacerts > jdk-all-certs.txt

如果是要删除一个信任链,那么执行以下命令

cd $JAVA_HOME/jre/lib/security
keytool -delete -alias mine_trust_chain -keystore cacerts 
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容