繁体   English   中英

ClientRequest接受所有证书

[英]ClientRequest accept all certificates

我正在使用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();

由于您使用的是Apache HTTP Client(默认情况下不受信任的证书),因此在大多数其他情况下,此异常与“ javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed ”具有相同的原因SSLSocket用法( 有关详细信息,请参见此答案 ):本质上,这表明您的证书不受信任。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM