欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > okHttp的https请求忽略ssl证书认证

okHttp的https请求忽略ssl证书认证

2025/2/23 12:47:06 来源:https://blog.csdn.net/bai920708/article/details/139630902  浏览:    关键词:okHttp的https请求忽略ssl证书认证

使用okhttp请求第三方https接口返回异常

sun.security.validator.ValidatorException: PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target

意思就是非安全的调用,java不认识这个接口证书。java security仓库中没有这个第三方站点的SSL证书,调用失败。

这里为了简单,我直接忽略ssl证书认证,代码如下

import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;import java.net.Proxy;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.*;/*** @author 白*** @date 2024-06-12 14:46*/
public class OkHttpUtil {private static OkHttpClient okHttpClient;public static ConnectionPool connectionPool = new ConnectionPool(10, 5, TimeUnit.MINUTES);public static OkHttpClient getInstance() {if (okHttpClient == null) { //加同步安全synchronized (OkHttpClient.class) {if (okHttpClient == null) { //okhttp可以缓存数据....指定缓存路径okHttpClient = new OkHttpClient.Builder()//构建器.proxy(Proxy.NO_PROXY) //来屏蔽系统代理.connectionPool(connectionPool).sslSocketFactory(getSSLSocketFactory(),  getX509TrustManager()).hostnameVerifier(getHostnameVerifier()).connectTimeout(600, TimeUnit.SECONDS)//连接超时.writeTimeout(600, TimeUnit.SECONDS)//写入超时.readTimeout(600, TimeUnit.SECONDS)//读取超时.build();okHttpClient.dispatcher().setMaxRequestsPerHost(200);okHttpClient.dispatcher().setMaxRequests(200);}}}return okHttpClient;}/*** description 忽略https证书验证*/private static HostnameVerifier getHostnameVerifier() {HostnameVerifier hostnameVerifier = new HostnameVerifier() {@Overridepublic boolean verify(String s, SSLSession sslSession) {return true;}};return hostnameVerifier;}/*** description 忽略https证书验证*/private static SSLSocketFactory getSSLSocketFactory() {try {SSLContext sslContext = SSLContext.getInstance("SSL");sslContext.init(null, getTrustManager(), new SecureRandom());return sslContext.getSocketFactory();} catch (Exception e) {throw new RuntimeException(e);}}private static X509TrustManager getX509TrustManager() {X509TrustManager trustManager = null;try {TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());trustManagerFactory.init((KeyStore) null);TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));}trustManager = (X509TrustManager) trustManagers[0];} catch (Exception e) {e.printStackTrace();}return trustManager;}private static TrustManager[] getTrustManager() {TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};}}};return trustAllCerts;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词