gpt4 book ai didi

ssl - 如何将证书链添加到 JKS

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:16 25 4
gpt4 key购买 nike

我有一个名为:cert.cer 的证书链,内容为:

subject= ... OU=MyCA
issuer= ... OU=MyCA
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

subject= ... OU=Client
issuer= .. OU=MyCA
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

我尝试通过调用将此链添加到 JKS:

keytool -import -trustcacerts -file cert.cer -keystore sample.keystore -storepass 123456 -别名链

,只添加OU=MyCA的顶级证书。

如何将此链正确添加到 JavaKeyStore (JKS)?

最佳答案

好的,我运行了您的命令以合并 PKCS7 格式的证书:

openssl > crl2pkcs7 -nocrl -certfile a.crt -certfile b.crt -out outfile.p7b

成功了。
然后我尝试按照您所说的使用以下命令将 PKCS#7 文件导入 JKS 文件:

keytool -import -trustcacerts -file outfile.p7b -keystore keystore1.jks -storepass 123456 -alias chain

它没有用。
然后我稍微研究了一下,发现我需要将证书链保存在 Base64 格式或 Der 格式的文件中。我有 Base64 格式的文件。因此,我尝试使用以下 Windows 命令连接文件:

copy /b a.crt+b.crt c.crt

linux 命令是:

cat a.crt b.crt > c.crt

所以输出文件看起来像这样:

-----BEGIN CERTIFICATE-----
..............................
..............................
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
...............................
...............................
-----END CERTIFICATE-----

然后,尝试使用上述命令在 JKS 中导入证书链。有效。然后,我尝试从 keystore 中查看证书列表。为此,我运行了以下命令:

keytool -list -v -keystore keystore1.jks

但是它说,只有“找到一个条目”并且显示了一个证书。由于 keystore 没有加载完整的证书链,因此实验失败了。
因此,我尝试使用以下 openssl 命令转换证书链中的 PKCS#7 文件:

pkcs7 -print_certs -in outfile.p7b -out certificates.cer

输出文件与您的文件完全一样,以主题 dn 和发行者 dn 开头,然后是页眉和页脚。然后我尝试将证书从“certificates.cer”存储到 jks 文件“keystore1.jks”。但是,同样,在导入之后,它显示 keystore 只有一个证书。因此,发行人 dn 和主题 dn 不是问题。
然后我尝试将Base64文件转换为Der文件,然后尝试连接数据:

openssl x509 -in a.crt -outform DER -out aa.crt
openssl x509 -in b.crt -outform DER -out bb.crt
copy /b aa.crt+bb.crt cc.crt

然后,我尝试将 der concated 文件导入 JKS。但同样只导入了一个证书。

我真的想过我做错了什么。因此,我查找了KeyTool的源代码,找到了导入证书或证书链的方法。

Imports a JDK 1.1-style identity database. We can only store one certificate per identity, because we use the identity's name as the alias (which references a keystore entry), and aliases must be unique.

令我惊讶的是,他们的代码将输入流转换为证书列表,但他们只使用证书的一个证书(第一个)。

if (certs!=null && certs.length>0) {
// we can only store one user cert per identity.
// convert old-style to new-style cert via the encoding
DerOutputStream dos = new DerOutputStream()
certs[0].encode(dos);
.............................

因此我们无法一次添加多个证书。策略是一个条目一个证书。因此,如果您有多个要输入的证书,则必须单独输入它们。或者,编写一些 Java 代码来简化我们的工作(我总是这样做)。
抱歉让我这么久。但希望这会消除您的大部分困惑。

关于ssl - 如何将证书链添加到 JKS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31820094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com