我在使用Java程序连接到安全站点时遇到问题。我已经导入了3个证书,这些证书来自我将要连接的服务器:公共证书、中间证书和根证书。我已经正确地将3个证书导入到java cacerts中。并在使用以下参数调用Java类时指定:
java -Djavax.net.debug=ssl
Djavax.net.ssl.keystore=JAVACACERTS -Djavax.net.ssl.keystorePassword=changeit -server -cp $CLASSPTH -Xmx500m SendOrderResponse但是,我得到了一个"bad_certificate“错误。我查看了日志的详细信息,发现根证书似乎不在证书链中。
知道为什么会这样吗?当我在Java cacerts中导入3个证书时?我假设错误证书是因为证书链错误而抛出的。
发布于 2013-06-27 23:26:09
我建议你运行:
openssl s_client -connect remoteserver:443假设远程服务器需要或请求客户端证书身份验证,它应该向您发送可接受的CA列表。
您应该发送最终由这些CA之一签名的证书。ssl规范不要求您发送CA,但是您应该将证书和完整的中间链发送到该CA。我的经验是,两个CA证书可能看起来非常相似。在这方面,迁移到2048位并没有帮助。再检查一遍。
顺便说一句,您的客户端收到了坏证书警报。问题出在客户端发送的证书上,而不是服务器证书的验证上。
(编辑)我有没有提到你发的证书必须是有效的?特别地,
DNS未过期的结束日期和合理的开始日期与您连接的计算机的公用
发布于 2011-12-13 20:55:21
看起来您没有使用客户端证书。
在这种情况下,不要在客户端应用程序中设置javax.net.ssl.keystore参数。只导入您的信任库(缺省情况下为cacerts)中的根证书(可能还有中间证书)也应该足够了。
有关密钥库/信任库的更多详细信息,请参阅以下答案:https://stackoverflow.com/a/6341566/372643
发布于 2012-10-24 13:53:00
如果您已经导入了证书,请尝试执行以下操作
Set PATH=<YOUR JRE/BIN>;%PATH%,然后运行java客户端。
https://stackoverflow.com/questions/8484360
复制相似问题