java 如何从.pfx文件中提取CA证书并将其添加到信任存储文件

wnvonmuf  于 2023-11-15  发布在  Java
关注(0)|答案(2)|浏览(389)

我有一个.pfx文件,它有多个证书,其中之一是分配给DCM中IBM i Remote Command Server的服务器证书的签名CA证书。
我设法使用opensslcertutil来显示这样一个证书的内容,如下所示:

openssl x509 -passin pass:<password> -text -noout -in filename.pfx
openssl pkcs12 -in filename.pfx -passin pass:<password> -info -nokeys
certutil -v -dump DEVP20.pfx

字符串
所有上述工作正常,显示内容,但问题是,我不知道如何分析这样的输出。
此外,keytool报告keystone中没有条目:

keytool -list -v -keystore filename.pfx
Enter keystore password: <entery-password>
Keystore type: PKCS12
Keystore provider: SunJSSE

Your keystore contains 0 entries


我只想创建一个新的信任存储区或使用现有的信任存储区(如jssecacerts)将签名CA证书添加到信任存储区。
请注意,在上面不同命令的输出中,我看到了多个证书。我不确定它们是链的一部分还是相关的,通过检查别名或友好名称,我可以知道我想要哪一个。
我们的目标是能够使用来自IBM Java的SecureAS400类来打开到IBM i的安全连接并调用命令,因此我们必须使用JVM加载信任存储。
谢谢你的帮助

fdbelqdn

fdbelqdn1#

首先,您必须使用openssl从.pfx文件中提取CA证书:
openssl pkcs12 -in filename.pfx -passin pass:<password> -info -nokeys > filename.pem的。
再次检查提取是否有效:
openssl x509 -in test.pem -noout -text
然后使用密钥工具创建新的JKS:
keytool -import -trustcacerts -keystore test.jks -storepass choose-password -file test.pem -alias CANAME
或者,您可以将凭证汇入现有的信任存放区:
keytool -import -keystore cacerts -storepass changeit -file test.pem -alias CANAME -storetype JKS
通常,您将使用openssl与大多数证书文件格式进行交互,并使用keytool仅与java密钥库(JKS)进行交互
==============.

更新

PKCS12是一种存档文件格式,用于存储私钥和扩展名为.p12.pfx的X.509证书。要能够使用.pfx文件,请使用openssl pkcs12命令。我猜x509命令将返回它找到的第一个证书。PKCS12 wiki
keytool管理一个密钥库(数据库),其中包含加密密钥、X.509证书链和可信证书。我认为它只能与java密钥库.jks.bcfks(Bouncy Castle FIPS密钥库)等一起使用。我认为您实际上可以使用keytool将证书从.pfx文件直接导入java密钥库。
keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 -destkeystore clientcert.jks -deststoretype JKS
这也可以导入私钥,如果它在.pfx文件中,但我不确定。
希望能帮上忙。

qmelpv7a

qmelpv7a2#

感谢@Yan和@dave_thompson_085提供的答案和信息。
最后,我们发现提供的PFX文件是不必要的。有一个.cer文件具有要信任的证书链。我使用这个新的.cer文件,并从JRE安全库中选择一个cacerts,复制它,更改其名称,并将.cer文件添加到cacerts文件的副本中。理由是我们可能需要信任JRE附带的一些证书,这将保存一些时间。
我使用了“IBM i Client Access Solutions”中的一个名为“Key Management”的桌面工具将cer文件导入到cacerts文件的副本中。现在,我有了一个新的jks文件,用于Java程序,该程序将使用类SecureAS400打开到IBM i的安全RPC连接。

一些额外的东西,以验证和澄清:

我使用了从@Yan提到的pfx文件中提取的pem文件.我使用keytool importpem文件导入到cacetric文件的副本中,所以现在我有了cacerts_a.jks
我理解这个pfx文件有根CA以及服务器证书的私钥,看起来中间有一个证书,所以它总共有3个证书。
然后,我明白了.不.我必须使用一个新的cer文件与信任链。我使用这个新的pem文件,并将其导入到cacerts文件的副本,现在我有,比如说,cacerts_b.jks
我尝试比较以下两个命令的输出:

>keytool -list -v -keystore cacerts_a.jks -storepass changeit | clip
>keytool -list -v -keystore cacerts_b.jks -storepass changeit | clip

字符串
我比较了上面两个命令的输出,发现从pfx文件中提取的pem/cer和给定的带有信任链的cer文件之间存在显著差异。在我看来,我们不应该为pfx文件获取信任链,因为它应该具有服务器证书。

相关问题