提交 38a4609e 编写于 作者: B Blankj

see 02/21 log

上级 7db0eb0e
package com.blankj.utilcode.util.http;
import android.annotation.SuppressLint;
import android.os.Build;
import android.support.annotation.NonNull;
import java.io.IOException;
import java.net.InetAddress;
......@@ -12,6 +14,7 @@ import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
......@@ -23,17 +26,35 @@ import javax.net.ssl.X509TrustManager;
* author: blankj
* blog : http://blankj.com
* time : 2019/02/20
* desc :
* </pre>
*/
public class SslConfig {
public final class SSLConfig {
SSLSocketFactory mSSLSocketFactory;
HostnameVerifier mHostnameVerifier;
private SSLSocketFactory mSSLSocketFactory;
private HostnameVerifier mHostnameVerifier;
public SSLConfig(@NonNull SSLSocketFactory factory, @NonNull HostnameVerifier verifier) {
mSSLSocketFactory = factory;
mHostnameVerifier = verifier;
}
public static final HostnameVerifier DEFAULT_VERIFIER = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
public static final SSLSocketFactory DEFAULT_SSL_SOCKET_FACTORY = new DefaultSSLSocketFactory();
public SSLSocketFactory getSSLSocketFactory() {
return mSSLSocketFactory;
}
public HostnameVerifier getHostnameVerifier() {
return mHostnameVerifier;
}
static class DefaultSocketFactory extends SSLSocketFactory {
private static class DefaultSSLSocketFactory extends SSLSocketFactory {
private static final String[] PROTOCOL_ARRAY;
private static final TrustManager[] DEFAULT_TRUST_MANAGERS;
......@@ -50,9 +71,11 @@ public class SslConfig {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
DEFAULT_TRUST_MANAGERS = new TrustManager[]{
new X509ExtendedTrustManager() {
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) { /**/ }
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) { /**/ }
......@@ -61,15 +84,19 @@ public class SslConfig {
return new X509Certificate[0];
}
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) { /**/ }
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) { /**/ }
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { /**/ }
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { /**/ }
}
......@@ -77,9 +104,11 @@ public class SslConfig {
} else {
DEFAULT_TRUST_MANAGERS = new TrustManager[]{
new X509TrustManager() {
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) { /**/ }
@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) { /**/ }
......@@ -93,70 +122,66 @@ public class SslConfig {
}
private SSLSocketFactory delegate;
private SSLSocketFactory mFactory;
DefaultSocketFactory() {
DefaultSSLSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, DEFAULT_TRUST_MANAGERS, new SecureRandom());
delegate = sslContext.getSocketFactory();
mFactory = sslContext.getSocketFactory();
} catch (GeneralSecurityException e) {
throw new AssertionError();
}
}
public DefaultSocketFactory(SSLSocketFactory factory) {
this.delegate = factory;
}
@Override
public String[] getDefaultCipherSuites() {
return delegate.getDefaultCipherSuites();
return mFactory.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
return delegate.getSupportedCipherSuites();
return mFactory.getSupportedCipherSuites();
}
@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
Socket ssl = delegate.createSocket(s, host, port, autoClose);
Socket ssl = mFactory.createSocket(s, host, port, autoClose);
setSupportProtocolAndCipherSuites(ssl);
return ssl;
}
@Override
public Socket createSocket(String host, int port) throws IOException {
Socket ssl = delegate.createSocket(host, port);
Socket ssl = mFactory.createSocket(host, port);
setSupportProtocolAndCipherSuites(ssl);
return ssl;
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException {
Socket ssl = delegate.createSocket(host, port, localHost, localPort);
Socket ssl = mFactory.createSocket(host, port, localHost, localPort);
setSupportProtocolAndCipherSuites(ssl);
return ssl;
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
Socket ssl = delegate.createSocket(host, port);
Socket ssl = mFactory.createSocket(host, port);
setSupportProtocolAndCipherSuites(ssl);
return ssl;
}
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
Socket ssl = delegate.createSocket(address, port, localAddress, localPort);
Socket ssl = mFactory.createSocket(address, port, localAddress, localPort);
setSupportProtocolAndCipherSuites(ssl);
return ssl;
}
@Override
public Socket createSocket() throws IOException {
Socket ssl = delegate.createSocket();
Socket ssl = mFactory.createSocket();
setSupportProtocolAndCipherSuites(ssl);
return ssl;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册