[英]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.