java - SSL 错误证书错误

标签 java ssl ssl-certificate

我在使用 Java 程序连接到安全站点时遇到问题。我已经导入了我将要连接的服务器提供的 3 个证书;公共(public)证书、内部证书和根证书。我已将 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 个证书时?我假设错误的证书是由于证书链错误而抛出的。

最佳答案

我建议你运行:

openssl s_client -connect remoteserver:443

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

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

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

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

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

关于java - SSL 错误证书错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8484360/

相关文章:

google-chrome - 以编程方式将 ROOT 证书导入 Google Chrome 中的 "Trusted Root Certification Authorities"

android - okhttp 无法正确验证引脚

java - jstack:目标进程没有响应

java - 在 Finalize 方法中触发用户可见的异常

java - 如何将当前 Activity 传递给服务?

python - Scapy-ssl_tls : does crafting ssl layer packets require dport 443?

ssl - 获取连接的根 CA 证书

java - 如何使用 c :out 不转义 JSTL 中的字符

ruby-on-rails-3 - SSL on Devise 无法正常工作 Rails 3

ssl - 如何将 X.509 v1 证书转换为 X.509 版本 3