HttpClient + SSL +可信证书

时间:2010-03-04 11:51:21

标签: java ssl httpclient

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

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

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

引起:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:找不到可信证书Exception。

即使将此有效证书导入我的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();
  }

注意: 我非常确定我们的服务器使用的是受信任的证书,因为我的浏览器从不抱怨。

谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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