繁体   English   中英

将具有多个证书的pem转换为Java密钥库

[英]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),因此您可以看到私钥和第一个证书属于同一类。 但这有点奇怪,因为...

  1. 私钥不再加密(不再加密)。
  2. 该格式仅对使用OpenSSL库的软件进行进一步处理有用,而在Java或Microsoft(IIS,.NET)世界中则无效。 二进制PKCS#12文件在所有环境中都可以使用。

您可以使用以下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文件中的私钥只是私钥。 不需要该密钥与文件中的任何证书有任何关系。

查看是否是证书的公钥的私钥的唯一方法是比较相应的公钥。 从私钥生成公钥,并与证书中的公钥进行比较。

  1. 从私钥获取公钥

将私钥提取到一个单独的文件(将各行

-----BEGIN RSA PRIVATE KEY-----
<<contents>>
-----END RSA PRIVATE KEY-----

进入单独的privkey.pem文件)

在命令行中:

openssl rsa -in privkey.pem -pubout > pubkey.pub
  1. 从证书获取公钥

将证书放入单独的文件certfile.pem (各行

-----BEGIN CERTIFICATE-----
<<contents>>
-----END CERTIFICATE-----

再次调用openssl

openssl x509 -pubkey -noout -in certfile.pem > pubkey2.pem

-noout禁止打印证书

然后检查pubkey.pempubkey2.pem

Java密钥库

在Oracle网站上有一篇文章介绍了如何将PEM证书导入JKS。 你试过了吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM