我想导入来自第三方的p7b文件到java信任存储中,其中p7b文件似乎包含根证书和公钥。
我尝试使用类似以下命令进行导入:
keytool -importcert -file certs.p7b -keystore dave.jks -storetype JCEKS -trustcacerts
当第三方向我提供文件时,他们没有告诉我公钥的别名是什么。
我想,如果不知道这个信息,就无法导入它,这样对吗?
这是一个相当古老的问题。但我刚遇到了同样的问题,所以我会发布我所做的。
我们从一个持有证书链的公共机构得到了一个 .p7b 文件,必须在我们的系统中接受。由于它有证书链,不能直接导入到 p12 文件中,因此,首先使用 openssl
检查它:
openssl pkcs7 -print_certs -inform der -in file.p7b
subject=LONG CERTIFICATE1 COMMONNAME WITH ESCAPE SEQUENCES
issuer=LONG CERTIFICATE1'S ISSUER COMMONNAME
-----BEGIN CERTIFICATE-----
long base64 string
-----END CERTIFICATE-----
subject=LONG CERTIFICATE2 COMMONNAME WITH ESCAPE SEQUENCES
issuer=LONG CERTIFICATE2'S ISSUER COMMONNAME
-----BEGIN CERTIFICATE-----
long base64 string
-----END CERTIFICATE-----
由于.p7b文件包含了多个证书,因此这个列表比较长。
接下来的步骤是将位于-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
之间的所有片段复制出来,并将它们存储在不同的文件中,并使用.pem
扩展名保存:
certificate1.pem
certificate2.pem
...
然后将它们导入到密钥库中,使用长的通用名称作为别名:
keytool -alias "LONG CERTIFICATE1 COMMONNAME WITH ESCAPE SEQUENCES" -importcert -trustcacerts -file certificate1.pem -keystore trustcerts.p12 -storetype PKCS12
keytool -alias "LONG CERTIFICATE2 COMMONNAME WITH ESCAPE SEQUENCES" -importcert -trustcacerts -file certificate2.pem -keystore trustcerts.p12 -storetype PKCS12
在此之后,我们拥有了一个包含所有 .p7b 证书的 pkcs12 密钥库。
p7b
文件中。openssl
命令通过标准输出返回它们。 - Oscar Pérez.pem
文件中包含-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
。然后使用keytool
导入就可以了。 - undefined
keytool -printcert -file whatever.p7b
或... - dave_thompson_085openssl pkcs7 -print_certs [-text] -in whatever.p7b
来打印证书。 - dave_thompson_085keytool错误:java.lang.Exception: Failed to parse input
- openssl命令给出了unable to load PKCS7 object 13060:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:701:Expecting: PKCS7
。然而,我可以使用KeyStoreExplorer实用程序打开该文件。 - DaveH-----BEGIN
开头的一行组成,然后是几行base64编码,最后以-----END
开头的一行,并且在BEGIN/END之后有什么单词?如果它不是文本,即大部分是未显示或“dingbat”字符,请尝试将-inform der
添加到openssl pkcs7
命令中。 - dave_thompson_085