gpt4 book ai didi

Java 客户端 SSL 套接字 unknown_ca

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

我希望能够连接到需要智能卡个人证书进行身份验证的 https 站点。我想我已经非常接近它的工作了,但不确定如何克服这个异常:

javax.net.ssl.SSLHandshakeException: Recieved fatal alert: unknown_ca

由于契约(Contract)原因,我无法分享我的代码,但这里有一个摘要:

我创建了一个 keystore ,其中包含我从浏览器导出的所有证书。我使用这个 keystore 作为 SSLContext 的信任库。我很确定这个 keystore 包含正确的 CA 证书来验证远程站点的证书,因为它修复了“无法找到请求目标的有效证书路径”异常。

我可以使用智能卡读卡器作为提供程序以编程方式创建 keystore ,类似于此处描述的技术:Common Access Card (CAC) Authentication Using Java .从智能卡创建的 keystore 包含我的个人证书。当我将它用作 SSLContext 的 keystore 时,这会解决错误消息:“收到致命警报:handshake_failure”。

所以,看来我越来越近了!但我看到的最新堆栈跟踪是:

javax.net.ssl.SSLHandshakeException: Recieved fatal alert: unknown_ca

我添加了 jvm 标志 -Djavax.net.debug=ssl 并且我看到了良好的 ssl 调试信息,但不确定如何读取调试跟踪以找出哪个 ca 是未知的?

一个问题:信任库 keystore 包含所有 CA 证书。然而,从智能卡创建的 keystore 不包含任何 CA 证书(它只包含在智能卡上找到的个人证书)。也许我需要将 CA 添加到 keystore ?

Andy 关于我可能遗漏的内容和/或如何解释 ssl 调试输出的其他建议/想法?

最佳答案

从智能卡创建 keystore 时,我似乎需要通过提供程序。

为了从智能卡创建 keystore ,我创建了一个 card.config 文件,然后使用此处描述的代码:Common Access Card (CAC) Authentication Using Java :

Provider provider = new sun.security.pkcs11.SunPKCS11("card.config");
Security.addProvider(provider);

然后,我使用这样的代码来创建 keystore :

KeyStore ks = KeyStore.getInstance("PKCS11");

将该行更改为以下内容似乎已解决“unknown_ca”问题:

KeyStore ks = KeyStore.getInstance("PKCS11", provider);

更新:将提供程序添加为第二个参数后,它工作了一段时间,但现在我又看到了 unknown_ca 错误?!

关于Java 客户端 SSL 套接字 unknown_ca,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20999561/

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