客户端与服务端忽略证书校验即是在客户端的网络请求和webview中设置信任所有证书,然后在与服务端进行Https网络通信的时候,客户端不必进行证书校验也能进行网络通信,否则就会报证书不受信异常。
缺陷:容易受到中间人攻击。
概览
- TrustManager和HostnameVerifier
- HttpURLConnection信任所有证书
- OkHttp信任所有证书
- webview信任所有证书
X509TrustManager
和HostnameVerifier
X509TrustManager用于实现SSL证书
的安全校验,若使用不当,将导致APP对SSL证书不作校验,从而 黑客有了中间人攻击的可乘之机。开发者常见错误:
- 自定义X509TrustManager,且不做任何校验逻辑,一般为空实现;
HostnameVerifier用于实现HTTPS通信中的域名
安全校验,即验证当前连接的HTTPS站点的SSL证书中的域名是否等于站点本身的域名。开发者常见错误:
- 自定义HostnameVerifier,且不做任何校验逻辑,一般为return true;
- 使用Android系统中自带的不安全的HostnameVerifier,效果等同于不做任何校验逻辑:
org.apache.http.conn.ssl.AllowAllHostnameVerifier
org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER
工具类下载地址:https://download.youkuaiyun.com/download/u010982507/10880268
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class SSLSocketClient {
//获取这个SSLSocketFactory
public static SSLSocketFactory getSSLSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance