我希望能够连接到需要通过智能卡进行身份验证的个人证书的https站点。我觉得我非常接近拥有它的工作,但不知道如何让过去这个异常:Java客户端SSL套接字unknown_ca
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是未知的?
一个问题:truststore密钥库包含所有CA证书。但是从智能卡创建的密钥库不包含任何CA证书(它只包含智能卡上的个人证书)。也许我需要将CA添加到密钥库?
Andy有关我可能会丢失什么和/或如何解释ssl调试输出的其他建议/想法?