我正在使用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();
}
注意: 我非常确定我们的服务器使用的是受信任的证书,因为我的浏览器从不抱怨。
谢谢。
答案 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手动启用信任,我假设您知道,因为您提到导入到您的信任库。