gpt4 book ai didi

java - KeyStore 和 TrustStore 不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:24 27 4
gpt4 key购买 nike

我有一个客户替换了我们产品组件的 keystore 和信任库。更换后组件无法相互通信(2 路 SSL)。

在 SSL 日志上,我看到:
http-nio-8100-exec-2, fatal error :42:空证书链
javax.net.ssl.SSLHandshakeException:空证书链
%% 无效:[ session 6,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256]
http-nio-8100-exec-2,发送 TLSv1.2 警报:致命,描述 = bad_certificate
http-nio-8100-exec-2,写入:TLSv1.2 警报,长度 = 2
http-nio-8100-exec-2,致命:引擎已经关闭。重新抛出 javax.net.ssl.SSLHandshakeException:空证书链

他们在双方都配置了相同的 keystore 和信任库文件。我已经打开了他们的 keystore 和信任库,它们是这样构建的:
keystore
entry1 - 服务器
证书[1] MD5: X
证书[2] MD5: 是
证书[3] MD5:Z

信任库
entry1 - 根目录
证书[1] MD5: Z
entry2 - 中级
证书[1] MD5: 是

在我看来,信任库中缺少 keystore 中的 cert[1](使用 MD5 X)这一事实是有问题的。

我说的对吗?

你能看出他们的 keystore 和信任库的构建方式有任何其他问题吗?

最佳答案

您的问题似乎与您的keystore 和/或truststore 中丢失的证书有关.

一般来说,当客户端向服务器发送请求时,服务器会提交其证书链,其中必须包括服务器的证书作为第一个条目,然后是其颁发者和其他颁发者。除非它出现在客户端的truststore 中,否则每个后续证书都必须直接证明它之前的证书。

您需要检查keystore 中的cert[1] 是否是自签名证书。您可以通过以下方式实现此目的:

对于 .jks Java keystore 类型:

keytool -list -v -keystore [keystore-file-name].jks

-#PKCS12 keystore 类型:

keytool -list -keystore [keystore-file-name].p12 -storetype PKCS12 -v

打印证书时,检查'Issuer' 属性。

如果它匹配'Owner'属性,则意味着它是一个自签名证书,您需要将'cert[1]'添加到信任库

如果它们不匹配,请尝试以下替代方法之一:

  • 生成由 'Y''Z' 并将其添加到 keystore 或替换现有的。是替换它还是添加它取决于您的代码如何读取证书。更换可能是更好的选择。
  • 添加 'cert[1]' 的当前'Issuer' em>keystore 进入信任库

如果 'cert[1''Issuer' 的证书在 keystore 已经存在于 truststore 中,我本以为 SSL 握手会成功。

以下是将颁发者添加到信任库的方法:

1) 获取存储在.cer 文件中的颁发者 的公共(public)证书.如果issuer 是自行生成的,并且您可以访问其keystore,则可以导出证书从那里使用以下命令:

keytool -export -keystore [issuer-keystore].jks -alias [alias]-file [output-file-name].cer

2) 将 .cer 文件导入truststore:

keytool -importcert -file [output-file-name].cer -keystore [truststore-file-name].jks -alias [alias]

关于java - KeyStore 和 TrustStore 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36471569/

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