在请求阿里云的api接口的时候,出现了
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
这个错误信息,demo代码是官方的,仔细一看,是https请求证书问题,后来找到解决办法。代码如下:
package com.aliyun.api.gateway.demo.util; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.http.client.HttpClient; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; public class WebClientDevWrapper { public static HttpClient wrapClient(HttpClient base) { try { SSLContext ctx = SSLContext.getInstance("TLS"); X509TrustManager tm = new X509TrustManager() { public X509Certificate getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate arg0, String arg1) throws CertificateException {} public void checkServerTrusted(X509Certificate arg0, String arg1) throws CertificateException {} }; ctx.init(null, new TrustManager { tm }, null); SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ClientConnectionManager ccm=base.getConnectionManager(); SchemeRegistry registry = ccm.getSchemeRegistry(); registry.register(new Scheme("https", 443, ssf)); return new DefaultHttpClient(ccm, base.getParams()); /* SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("https", 443, ssf));
其中调用的代码如下:
HttpClient httpClient = new DefaultHttpClient(); httpClient=WebClientDevWrapper.wrapClient(httpClient);
完美解决!!!
22 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!