我有一个.pfx
文件,它有多个证书,其中之一是分配给DCM中IBM i Remote Command Server的服务器证书的签名CA证书。
我设法使用openssl
和certutil
来显示这样一个证书的内容,如下所示:
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加载信任存储。
谢谢你的帮助
2条答案
按热度按时间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 wikikeytool
管理一个密钥库(数据库),其中包含加密密钥、X.509证书链和可信证书。我认为它只能与java密钥库.jks
或.bcfks
(Bouncy Castle FIPS密钥库)等一起使用。我认为您实际上可以使用keytool
将证书从.pfx
文件直接导入java密钥库。keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 -destkeystore clientcert.jks -deststoretype JKS
个这也可以导入私钥,如果它在
.pfx
文件中,但我不确定。希望能帮上忙。
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 import
将pem
文件导入到cacetric文件的副本中,所以现在我有了cacerts_a.jks
。我理解这个
pfx
文件有根CA以及服务器证书的私钥,看起来中间有一个证书,所以它总共有3个证书。然后,我明白了.不.我必须使用一个新的
cer
文件与信任链。我使用这个新的pem
文件,并将其导入到cacerts
文件的副本,现在我有,比如说,cacerts_b.jks
。我尝试比较以下两个命令的输出:
字符串
我比较了上面两个命令的输出,发现从
pfx
文件中提取的pem/cer
和给定的带有信任链的cer
文件之间存在显著差异。在我看来,我们不应该为pfx
文件获取信任链,因为它应该具有服务器证书。