【发布时间】:2014-01-26 18:49:29
【问题描述】:
我希望能够连接到需要来自智能卡的个人证书进行身份验证的 https 站点。我想我已经很接近它的工作了,但不知道如何克服这个异常:
javax.net.ssl.SSLHandshakeException: Recieved fatal alert: unknown_ca
由于合同原因,我无法分享我的代码,但这里有一个摘要:
我创建了一个密钥库,其中包含我从浏览器中导出的所有证书。我将此密钥库用作 SSLContext 的信任库。我很确定这个密钥库包含正确的 CA 证书来验证远程站点的证书,因为它修复了“无法找到请求目标的有效证书路径”异常。
我可以使用智能卡读卡器作为提供程序以编程方式创建密钥库,类似于此处描述的技术:Common Access Card (CAC) Authentication Using Java。从智能卡创建的密钥库包含我的个人证书。当我将它用作 SSLContext 的密钥库时,这会解决错误消息:“收到致命警报:handshake_failure”。
所以,看来我越来越近了!但我看到的最新堆栈跟踪是:
javax.net.ssl.SSLHandshakeException: Recieved fatal alert: unknown_ca
我添加了 jvm 标志 -Djavax.net.debug=ssl,我看到了良好的 ssl 调试信息,但不确定如何读取调试跟踪以确定哪个 ca 未知?
一个问题:信任库密钥库包含所有 CA 证书。但是,从智能卡创建的密钥库不包含任何 CA 证书(它只包含在智能卡上找到的个人证书)。也许我需要将 CA 添加到密钥库?
Andy 关于我可能遗漏的内容和/或如何解释 ssl 调试输出的其他建议/想法?
【问题讨论】: