Retrofit+OKHttp忽略https证书验证

记录这个的原因,是因为很多时候,因为后台配置的证书不正确导致APP访问不到服务器数据,导致影响自身的开发进度。没几行代码,逻辑也清晰,所以下面就直接贴出工具类吧:

 1 package huolongluo.yeshen.byw.injection.model;
 2
 3 import java.security.SecureRandom;
 4 import java.security.cert.X509Certificate;
 5
 6 import javax.net.ssl.HostnameVerifier;
 7 import javax.net.ssl.SSLContext;
 8 import javax.net.ssl.SSLSession;
 9 import javax.net.ssl.SSLSocketFactory;
10 import javax.net.ssl.TrustManager;
11 import javax.net.ssl.X509TrustManager;
12
13 /**
14  * Created by 火龙裸先生 on 2018/1/26.
15  * <p>
16  * 忽略https证书验证
17  */
18
19 public class SSLSocketClient
20 {
21     //获取这个SSLSocketFactory
22     public static SSLSocketFactory getSSLSocketFactory()
23     {
24         try
25         {
26             SSLContext sslContext = SSLContext.getInstance("SSL");
27             sslContext.init(null, getTrustManager(), new SecureRandom());
28             return sslContext.getSocketFactory();
29         }
30         catch (Exception e)
31         {
32             throw new RuntimeException(e);
33         }
34     }
35
36     //获取TrustManager
37     private static TrustManager[] getTrustManager()
38     {
39         TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager()
40         {
41             @Override
42             public void checkClientTrusted(X509Certificate[] chain, String authType)
43             {
44             }
45
46             @Override
47             public void checkServerTrusted(X509Certificate[] chain, String authType)
48             {
49             }
50
51             @Override
52             public X509Certificate[] getAcceptedIssuers()
53             {
54                 return new X509Certificate[]{};
55             }
56         }};
57         return trustAllCerts;
58     }
59
60     //获取HostnameVerifier
61     public static HostnameVerifier getHostnameVerifier()
62     {
63         HostnameVerifier hostnameVerifier = new HostnameVerifier()
64         {
65             @Override
66             public boolean verify(String s, SSLSession sslSession)
67             {
68                 return true;
69             }
70         };
71         return hostnameVerifier;
72     }
73 }

有了以上的工具类,通过OKHttpClient.Builder对象调用 “sslSocketFactory ”方法 和 “hostnameVerifier ” 方法。类似于如下:

简言之:

1 builder.sslSocketFactory(SSLSocketClient.getSSLSocketFactory());
2 builder.hostnameVerifier(SSLSocketClient.getHostnameVerifier());

原文地址:https://www.cnblogs.com/huolongluo/p/8360478.html

时间: 2024-10-03 03:21:25

Retrofit+OKHttp忽略https证书验证的相关文章

HttpClient忽略用户证书验证的方法

程序中出了这样的异常:javax.net.ssl.SSLException: hostname in certificate didn't match.异常发生在这行代码上:httpClient.execute(httpGet); 初步判断是证书的问题,准备采用忽略证书的方法解决,但在网上找了半天都没找到靠谱的代码解决,最后还是自己琢磨解决了. 得到一个教训,网上找答案是不靠谱的,因为具体问题需要具体分析,别人的方法不一定能解决你的,一定要自己思考,自己琢磨.在网上最重要的是能找到问题的解决思路

我的Android进阶之旅------&gt;Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEn

在okhttp3,WebView中忽略HTTPS证书校验

在APP开发过程中,后台使用的可能是自签的Https证书,如果不忽略证书校验,会出现Trust anchor for certification path not found的错误 Okhttp3忽略HTTPS证书校验 import java.security.SecureRandom; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SS

https证书验证

申请 目前是在 GoDaddy 申请的 CN=*.test.com 收到文件后会打印一份送行政部法务组,存入保险柜. 文件构成 gd_bundle.crt文件 GoDaddy提供的证书链 test.com.crt文件 证书 test.com.csr文件 证书签发请求(只第一次使用) test.com.key 私钥文件 nginx 上配置 HTTPS 需要两个参数: ssl_certificate 指令需要的文件由 cat test.com.crt gd_bundle.crt >test_chai

python2/3 https忽略ssl证书验证

import ssl ssl._create_default_https_context = ssl._create_unverified_context InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised

HTTPS请求 SSL证书验证

import urllib2 url = "https://www.12306.cn/mormhweb/" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} request = urllib2.Request(ur

网站https证书必要性

前几年浏览器厂商开始要求网站挂载https证书,站长都知道好的证书很贵,有专门机构在做带企业名称这类证书的生意.你细细品味就知道这是整个行业挖的一个大坑,大家其实都在促进一门生意成交.随着这些年互联网发展,证书越来越引起搜索引擎重视,都觉得这是个大趋势,百度在自己的站长平台里放了https证书验证,你的网站如果加载了证书就会给你一些权重加分.市场毕竟就是这个导向,很多小站站长苦恼,选择什么样的证书,安装证书会不会很麻烦,这里给你们推荐一个捷径.你的服务器如果是linux centos系统,推荐使

Axis 1 https(SSL) client 证书验证错误ValidatorException workaround

Axis 1.x 编写的client在测试https的webservice的时候, 由于client 代码建立SSL连接的时候没有对truststore进行设置,在与https部署的webservice 连接会在运行时报出: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath

关于httpclient 请求https (如何绕过证书验证)

第一种方法,适用于httpclient4.X 里边有get和post两种方法供你发送请求使用.导入证书发送请求的在这里就不说了,网上到处都是 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.n