Skip to content

Commit 7db0eb0

Browse files
committed
see 02/20 log
1 parent 30eebad commit 7db0eb0

File tree

3 files changed

+343
-2
lines changed

3 files changed

+343
-2
lines changed

utilcode/lib/src/main/java/com/blankj/utilcode/util/http/HttpUtils.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,24 @@ public boolean verify(String hostname, SSLSession session) {
7070
private static final Config CONFIG = new Config();
7171

7272

73+
private final Config mConfig;
74+
private static HttpUtils sHttpUtils;
7375

74-
private HttpUtils(Config config) {
76+
private HttpUtils(@NonNull Config config) {
77+
mConfig = config;
78+
}
7579

80+
public static HttpUtils getInstance(@NonNull Config config) {
81+
if (sHttpUtils == null) {
82+
synchronized (HttpUtils.class) {
83+
sHttpUtils = new HttpUtils(config);
84+
}
85+
}
86+
return sHttpUtils;
7687
}
7788

7889
public static void call(@NonNull final Request request, @NonNull final ResponseCallback callback) {
7990
new Call(request, callback).run();
80-
8191
}
8292

8393
private static HttpURLConnection getConnection(final Request request) throws IOException {
@@ -216,6 +226,7 @@ public static class Config {
216226
private int connectTimeout = CONNECT_TIMEOUT_TIME;
217227
private int readTimeout = READ_TIMEOUT_TIME;
218228
private boolean useCaches = false;
229+
private socke
219230
}
220231

221232
public static class Dispatcher {
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
package com.blankj.utilcode.util.http;
2+
3+
import android.os.Build;
4+
5+
import java.io.IOException;
6+
import java.net.InetAddress;
7+
import java.net.Socket;
8+
import java.security.GeneralSecurityException;
9+
import java.security.SecureRandom;
10+
import java.security.cert.X509Certificate;
11+
12+
import javax.net.ssl.HostnameVerifier;
13+
import javax.net.ssl.SSLContext;
14+
import javax.net.ssl.SSLEngine;
15+
import javax.net.ssl.SSLSocket;
16+
import javax.net.ssl.SSLSocketFactory;
17+
import javax.net.ssl.TrustManager;
18+
import javax.net.ssl.X509ExtendedTrustManager;
19+
import javax.net.ssl.X509TrustManager;
20+
21+
/**
22+
* <pre>
23+
* author: blankj
24+
* blog : http://blankj.com
25+
* time : 2019/02/20
26+
* desc :
27+
* </pre>
28+
*/
29+
public class SslConfig {
30+
31+
SSLSocketFactory mSSLSocketFactory;
32+
HostnameVerifier mHostnameVerifier;
33+
34+
35+
36+
static class DefaultSocketFactory extends SSLSocketFactory {
37+
38+
private static final String[] PROTOCOL_ARRAY;
39+
private static final TrustManager[] DEFAULT_TRUST_MANAGERS;
40+
41+
static {
42+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
43+
PROTOCOL_ARRAY = new String[]{"TLSv1", "TLSv1.1", "TLSv1.2"};
44+
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
45+
PROTOCOL_ARRAY = new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"};
46+
} else {
47+
PROTOCOL_ARRAY = new String[]{"SSLv3", "TLSv1"};
48+
}
49+
50+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
51+
DEFAULT_TRUST_MANAGERS = new TrustManager[]{
52+
new X509ExtendedTrustManager() {
53+
@Override
54+
public void checkClientTrusted(X509Certificate[] chain, String authType) { /**/ }
55+
56+
@Override
57+
public void checkServerTrusted(X509Certificate[] chain, String authType) { /**/ }
58+
59+
@Override
60+
public X509Certificate[] getAcceptedIssuers() {
61+
return new X509Certificate[0];
62+
}
63+
64+
@Override
65+
public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) { /**/ }
66+
67+
@Override
68+
public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) { /**/ }
69+
70+
@Override
71+
public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { /**/ }
72+
73+
@Override
74+
public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { /**/ }
75+
}
76+
};
77+
} else {
78+
DEFAULT_TRUST_MANAGERS = new TrustManager[]{
79+
new X509TrustManager() {
80+
@Override
81+
public void checkClientTrusted(X509Certificate[] chain, String authType) { /**/ }
82+
83+
@Override
84+
public void checkServerTrusted(X509Certificate[] chain, String authType) { /**/ }
85+
86+
@Override
87+
public X509Certificate[] getAcceptedIssuers() {
88+
return new X509Certificate[0];
89+
}
90+
}
91+
};
92+
}
93+
94+
}
95+
96+
private SSLSocketFactory delegate;
97+
98+
DefaultSocketFactory() {
99+
try {
100+
SSLContext sslContext = SSLContext.getInstance("TLS");
101+
sslContext.init(null, DEFAULT_TRUST_MANAGERS, new SecureRandom());
102+
delegate = sslContext.getSocketFactory();
103+
} catch (GeneralSecurityException e) {
104+
throw new AssertionError();
105+
}
106+
}
107+
108+
public DefaultSocketFactory(SSLSocketFactory factory) {
109+
this.delegate = factory;
110+
}
111+
112+
@Override
113+
public String[] getDefaultCipherSuites() {
114+
return delegate.getDefaultCipherSuites();
115+
}
116+
117+
@Override
118+
public String[] getSupportedCipherSuites() {
119+
return delegate.getSupportedCipherSuites();
120+
}
121+
122+
@Override
123+
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
124+
Socket ssl = delegate.createSocket(s, host, port, autoClose);
125+
setSupportProtocolAndCipherSuites(ssl);
126+
return ssl;
127+
}
128+
129+
@Override
130+
public Socket createSocket(String host, int port) throws IOException {
131+
Socket ssl = delegate.createSocket(host, port);
132+
setSupportProtocolAndCipherSuites(ssl);
133+
return ssl;
134+
}
135+
136+
@Override
137+
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException {
138+
Socket ssl = delegate.createSocket(host, port, localHost, localPort);
139+
setSupportProtocolAndCipherSuites(ssl);
140+
return ssl;
141+
}
142+
143+
@Override
144+
public Socket createSocket(InetAddress host, int port) throws IOException {
145+
Socket ssl = delegate.createSocket(host, port);
146+
setSupportProtocolAndCipherSuites(ssl);
147+
return ssl;
148+
}
149+
150+
@Override
151+
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
152+
Socket ssl = delegate.createSocket(address, port, localAddress, localPort);
153+
setSupportProtocolAndCipherSuites(ssl);
154+
return ssl;
155+
}
156+
157+
@Override
158+
public Socket createSocket() throws IOException {
159+
Socket ssl = delegate.createSocket();
160+
setSupportProtocolAndCipherSuites(ssl);
161+
return ssl;
162+
}
163+
164+
private void setSupportProtocolAndCipherSuites(Socket socket) {
165+
if (socket instanceof SSLSocket) {
166+
((SSLSocket) socket).setEnabledProtocols(PROTOCOL_ARRAY);
167+
}
168+
}
169+
}
170+
}
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
package com.blankj.utilcode.util.http.ssl;
2+
3+
import android.os.Build;
4+
5+
import java.io.IOException;
6+
import java.net.InetAddress;
7+
import java.net.Socket;
8+
import java.security.GeneralSecurityException;
9+
import java.security.SecureRandom;
10+
import java.security.cert.X509Certificate;
11+
12+
import javax.net.ssl.SSLContext;
13+
import javax.net.ssl.SSLEngine;
14+
import javax.net.ssl.SSLSocket;
15+
import javax.net.ssl.SSLSocketFactory;
16+
import javax.net.ssl.TrustManager;
17+
import javax.net.ssl.X509ExtendedTrustManager;
18+
import javax.net.ssl.X509TrustManager;
19+
20+
/**
21+
* <pre>
22+
* author: blankj
23+
* blog : http://blankj.com
24+
* time : 2019/02/20
25+
* </pre>
26+
*/
27+
public class DefaultSocketFactory extends SSLSocketFactory {
28+
29+
private static final String[] PROTOCOL_ARRAY;
30+
private static final TrustManager[] DEFAULT_TRUST_MANAGERS;
31+
32+
static {
33+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
34+
PROTOCOL_ARRAY = new String[]{"TLSv1", "TLSv1.1", "TLSv1.2"};
35+
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
36+
PROTOCOL_ARRAY = new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"};
37+
} else {
38+
PROTOCOL_ARRAY = new String[]{"SSLv3", "TLSv1"};
39+
}
40+
41+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
42+
DEFAULT_TRUST_MANAGERS = new TrustManager[]{
43+
new X509ExtendedTrustManager() {
44+
@Override
45+
public void checkClientTrusted(X509Certificate[] chain, String authType) { /**/ }
46+
47+
@Override
48+
public void checkServerTrusted(X509Certificate[] chain, String authType) { /**/ }
49+
50+
@Override
51+
public X509Certificate[] getAcceptedIssuers() {
52+
return new X509Certificate[0];
53+
}
54+
55+
@Override
56+
public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) { /**/ }
57+
58+
@Override
59+
public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) { /**/ }
60+
61+
@Override
62+
public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { /**/ }
63+
64+
@Override
65+
public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { /**/ }
66+
}
67+
};
68+
} else {
69+
DEFAULT_TRUST_MANAGERS = new TrustManager[]{
70+
new X509TrustManager() {
71+
@Override
72+
public void checkClientTrusted(X509Certificate[] chain, String authType) { /**/ }
73+
74+
@Override
75+
public void checkServerTrusted(X509Certificate[] chain, String authType) { /**/ }
76+
77+
@Override
78+
public X509Certificate[] getAcceptedIssuers() {
79+
return new X509Certificate[0];
80+
}
81+
}
82+
};
83+
}
84+
85+
}
86+
87+
private SSLSocketFactory delegate;
88+
89+
DefaultSocketFactory() {
90+
try {
91+
SSLContext sslContext = SSLContext.getInstance("TLS");
92+
sslContext.init(null, DEFAULT_TRUST_MANAGERS, new SecureRandom());
93+
delegate = sslContext.getSocketFactory();
94+
} catch (GeneralSecurityException e) {
95+
throw new AssertionError();
96+
}
97+
}
98+
99+
public DefaultSocketFactory(SSLSocketFactory factory) {
100+
this.delegate = factory;
101+
}
102+
103+
@Override
104+
public String[] getDefaultCipherSuites() {
105+
return delegate.getDefaultCipherSuites();
106+
}
107+
108+
@Override
109+
public String[] getSupportedCipherSuites() {
110+
return delegate.getSupportedCipherSuites();
111+
}
112+
113+
@Override
114+
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
115+
Socket ssl = delegate.createSocket(s, host, port, autoClose);
116+
setSupportProtocolAndCipherSuites(ssl);
117+
return ssl;
118+
}
119+
120+
@Override
121+
public Socket createSocket(String host, int port) throws IOException {
122+
Socket ssl = delegate.createSocket(host, port);
123+
setSupportProtocolAndCipherSuites(ssl);
124+
return ssl;
125+
}
126+
127+
@Override
128+
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException {
129+
Socket ssl = delegate.createSocket(host, port, localHost, localPort);
130+
setSupportProtocolAndCipherSuites(ssl);
131+
return ssl;
132+
}
133+
134+
@Override
135+
public Socket createSocket(InetAddress host, int port) throws IOException {
136+
Socket ssl = delegate.createSocket(host, port);
137+
setSupportProtocolAndCipherSuites(ssl);
138+
return ssl;
139+
}
140+
141+
@Override
142+
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
143+
Socket ssl = delegate.createSocket(address, port, localAddress, localPort);
144+
setSupportProtocolAndCipherSuites(ssl);
145+
return ssl;
146+
}
147+
148+
@Override
149+
public Socket createSocket() throws IOException {
150+
Socket ssl = delegate.createSocket();
151+
setSupportProtocolAndCipherSuites(ssl);
152+
return ssl;
153+
}
154+
155+
private void setSupportProtocolAndCipherSuites(Socket socket) {
156+
if (socket instanceof SSLSocket) {
157+
((SSLSocket) socket).setEnabledProtocols(PROTOCOL_ARRAY);
158+
}
159+
}
160+
}

0 commit comments

Comments
 (0)