[英]Converting pem with multiple certificates to java keystore
我得到了一个带有两个证书的pem文件。
首先是证书是针对我公司的(即主题是针对我公司的)。
第二个证书是颁发者的证书。
看起来像这样...
Bag Attributes
localKeyID: 01 00 00 00
friendlyName: CCAPI Client Certificate
Key Attributes
X509v3 Key Usage: 10
-----BEGIN RSA PRIVATE KEY-----
<<contents>>
-----END RSA PRIVATE KEY-----
Bag Attributes
localKeyID: 01 00 00 00
friendlyName: CCAPI Client Certificate
subject=MyCompany CN/OU/O/L/ST/C
issuer=Issuer CN/OU/O/L/ST/C
-----BEGIN CERTIFICATE-----
<<contents>>
-----END CERTIFICATE-----
Bag Attributes
localKeyID: 02 00 00 00
subject=Issuer CN/OU/O/L/ST/C
issuer=Issuer CN/OU/O/L/ST/C
-----BEGIN CERTIFICATE-----
<<contents>>
-----END CERTIFICATE-----
首先,我想确认几件事。
术语上明智的说法是我有一个带有两个证书的pem文件吗? 如何描述私钥部分? 这是我要连接的服务器的公钥吗?
其次,我需要使用keytool命令来创建一个同时包含证书和颁发证书的Java密钥库文件(jks)。
有人可以通过命令帮助我吗? 我花了大量时间在谷歌上搜索,但是似乎有很多不同的用例,这使我感到困惑。
提前致谢
您没有提到为什么要提供此文件,但是从内容来看,我认为它是用于通过HTTPS客户端身份验证访问网站/服务的。 私钥(和证书)用于针对服务器进行身份验证。 可能需要颁发者证书才能完成到服务器上受信任的根证书的链(或者根本不需要)。
该文件不是以很常见的格式编码的,基本上就是OpenSSL将PKCS#12文件写为PEM时发生的情况。 以下OpenSSL命令将生成如下文件:
openssl pkcs12 -in keyStore.p12 -out keyStore.pem -nodes
这样可以保留PKCS#12格式的元数据(例如ID和friendlyNames),因此您可以看到私钥和第一个证书属于同一类。 但这有点奇怪,因为...
您可以使用以下OpenSSL命令将其转换回二进制PKCS#12:
openssl pkcs12 -export -in keyStore.pem -out keyStore.p12
从现在开始,您将拥有一个标准PKCS#12文件,您可以在Java软件中直接使用它,也可以使用keytool将其转换为JKS / JCEKS 。
严格来说,PEM是一个容器,可以保留各种类型的文本编码的PKI数据以及信息文本。
引用规格 :
文本编码以包含“ ----- BEGIN”,标签和“ -----”的行开头,并以包含“ ----- END”,标签和“-”的行结尾---”。 在这两行之间,即“封装边界”,是根据[RFC4648]第4节进行的base64编码数据。 (PEM [RFC1421]将此数据称为“封装的文本部分”。)允许封装边界之前的数据,并且解析器在处理此类数据时绝不能发生故障。 此外,解析器应该忽略空格和其他非base64字符,并且必须处理不同的换行符。
PEM文件中的私钥只是私钥。 不需要该密钥与文件中的任何证书有任何关系。
查看是否是证书的公钥的私钥的唯一方法是比较相应的公钥。 从私钥生成公钥,并与证书中的公钥进行比较。
将私钥提取到一个单独的文件(将各行
-----BEGIN RSA PRIVATE KEY-----
<<contents>>
-----END RSA PRIVATE KEY-----
进入单独的privkey.pem
文件)
在命令行中:
openssl rsa -in privkey.pem -pubout > pubkey.pub
将证书放入单独的文件certfile.pem
(各行
-----BEGIN CERTIFICATE-----
<<contents>>
-----END CERTIFICATE-----
)
再次调用openssl
:
openssl x509 -pubkey -noout -in certfile.pem > pubkey2.pem
-noout
禁止打印证书
然后检查pubkey.pem
和pubkey2.pem
。
Java密钥库
在Oracle网站上有一篇文章介绍了如何将PEM证书导入JKS。 你试过了吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.