【问题标题】:HttpClient+SSL+ Trusted CertificateHttpClient+SSL+可信证书
【发布时间】:2010-03-04 11:51:21
【问题描述】:

我正在使用 Commons HttpClient API 连接到我们的一台服务器。

此服务器使用 SSL,并且还使用有效证书(由 Verisign Trust Network 颁发)。

当我连接到服务器时,我的浏览器从不抱怨。但是我的java程序抛出了

原因:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:找不到受信任的证书异常。

即使此有效证书已导入我的 java 信任库,我仍然遇到同样的问题。

我使用以下简单代码连接到服务器..

HttpClient httpclient = new HttpClient();
  GetMethod httpget = new GetMethod("https://www.ourserver.com/"); 
  try { 
    httpclient.executeMethod(httpget);
    System.out.println(httpget.getStatusLine());
  } finally {
    httpget.releaseConnection();
  }

注意: 我很确定我们的服务器正在使用受信任的证书,因为我的浏览器从未抱怨过。

谢谢。

【问题讨论】:

  • 您使用的 java 版本是什么,您的证书链顶部的 Verisign 根证书的完整主题名称是什么?
  • 我使用的是 JDK 1.4。证书层次结构如下所示... 1. 内置对象令牌:Verisign Class 3 Public Primary Certification Authority 2. VeriSign, Inc 3. OurServer..

标签: java ssl httpclient


【解决方案1】:

如果您使用的是较旧版本的 java,即 1.4,则威瑞信根 CA 可能不受信任。在这种情况下,您必须配置一个包含证书的信任库。这可以通过 de 'javax.net.ssl.trustStore' 系统属性来完成,但不建议这样做。

您可以实现 'org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory' 以提供具有给定信任库的自定义 SocketFactory。

【讨论】:

    【解决方案2】:

    您是否已将 Verisign 根 CA 添加到您的信任库?该错误可能是因为颁发您的证书的 CA 不受信任。

    我不确定 Java 的信任库是否像大多数 Web 浏览器一样自动配置为信任“默认”根 CA(Verisign、Thawte 等)。您可能必须使用 keytool 手动为每个启用信任,我假设您知道,因为您提到导入到您的信任库。

    【讨论】:

    • java 确实信任很多 CA 证书。但在较旧的 Java 版本中,并非所有最近的 CA 都是受信任的
    • 我刚刚将该证书单独导入到 java 的信任库中。我不知道如何为 Verisign Root CA 执行此操作。我没有这个根证书。还有一个问题 如果我在公开的 Https 网站上测试,我的程序运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2013-10-31
    相关资源
    最近更新 更多