ClientRequest接受所有证书

时间:2014-05-21 21:12:21

标签: java ssl

我使用ClientRequest库来执行“GET'但请求我遇到证书错误:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397) [jsse.jar:1.7.0_40]
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
    at org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor.execute(ApacheHttpClient4Executor.java:182) [resteasy-jaxrs-2.3.6.Final-redhat-1.jar:2.3.6.Final-redhat-1]

由于这只是一个测试环境,我希望能够通过https忽略或接受所有证书。 (我知道这会破坏ssl的目的。)任何指向正确方向的人都非常感激!

    ClientRequest request = new ClientRequest(someURL.toString());
    ClientResponse<SomeClass> response = null;
    response = request.get(SomeClass.class);
    response.getEntity();

1 个答案:

答案 0 :(得分:1)

由于您使用的是Apache HTTP Client,默认情况下证书不受信任,因此在javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed的大多数其他用途中,此异常与“SSLSocket”的原因相同(请参阅{{3 }}):基本上,它表明您的证书不受信任。

不是忽略错误(通过添加特定代码来绕过任何证书验证,代码可能会在您接近发布截止日期时忘记),请在您的信任库中导入自定义证书。例如,创建与JRE捆绑在一起的cacerts文件的本地副本,使用keytool导入自定义证书,并将javax.net.ssl.trustStore系统属性(和相关属性)指向该文件当你启动你的JVM时。