我收到了一个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文件是正确的吗?如何描述PRIVATE KEY部分?这是我尝试连接的服务器的公钥吗?
其次,我需要使用keytool命令创建一个包含证书和问题证书的java密钥库文件(jks)。
有人可以帮助我完成这些命令。我花了很多时间在谷歌上搜索,但似乎有很多不同的使用案例让我感到困惑。
提前致谢
答案 0 :(得分:1)
您还没有提到为什么会给您这个文件,但从内容来看,我认为它是通过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文件,您可以使用directly in Java software或convert with keytool to JKS/JCEKS。
答案 1 :(得分:0)
严格来说,PEM是一个容器,可以保存各种类型的文本编码PKI数据以及信息文本。
文本编码以包含“----- BEGIN”的行开头,a 标签和“-----”,以包含“----- END”的行结束,a 标签和“-----”。在这些线之间,或“封装 “是”,是根据第4节的base64编码数据 [RFC4648]。 (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的article。你试过吗?