SSL错误证书错误

时间:2011-12-13 04:32:44

标签: java ssl ssl-certificate

我无法使用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个证书时?我认为由于证书链错误而引发了错误的证书。

3 个答案:

答案 0 :(得分:3)

我建议你跑:

openssl s_client -connect remoteserver:443

假设远程服务器需要或请求客户端证书身份验证,它应该向您发送可接受的CA列表。

您应该发送最终由其中一个CA签名的证书。 ssl规范不要求您发送CA,但是您应该将证书和完整的中间链发送到该CA. 我的经验是两个CA证书可能看起来非常相似。在这方面,向2048位的迁移并没有帮助。仔细检查。

作为旁注,您的客户收到错误的证书提醒。问题在于客户端发送的证书,而不是服务器证书的验证。

(编辑) 我是否提到您发送的证书必须有效?特别是,

  • 未过期的结束日期和合理的开始日期
  • 与您要连接的计算机的公共DNS服务器名称匹配的CN:服务器可能正在客户端IP上执行反向DNS查找,并将其与发送的证书的CN匹配。

答案 1 :(得分:1)

看起来您没有使用客户端证书。

在这种情况下,请勿在客户端应用程序中设置javax.net.ssl.keystore参数。仅在信任库中导入根(也可能是中间)证书(默认为cacerts)也应该足够了。

此答案中有关密钥库/信任库的更多详细信息:https://stackoverflow.com/a/6341566/372643

答案 2 :(得分:-2)

如果您已导入证书而不是尝试此

Set PATH=<YOUR JRE/BIN>;%PATH%

然后运行你的java客户端