Update ssl

This commit is contained in:
FongMi 2022-12-16 11:41:24 +08:00
parent 2b1651dbb7
commit 06b878239a
5 changed files with 20 additions and 4 deletions

View File

@ -33,7 +33,7 @@ android {
dependencies { dependencies {
implementation 'com.squareup.okhttp3:okhttp:3.12.13' implementation 'com.squareup.okhttp3:okhttp:3.12.13'
implementation 'com.google.code.gson:gson:2.9.1' implementation 'com.google.code.gson:gson:2.8.6'
implementation 'cn.wanghaomiao:JsoupXpath:2.5.1' implementation 'cn.wanghaomiao:JsoupXpath:2.5.1'
implementation 'com.google.zxing:core:3.3.0' implementation 'com.google.zxing:core:3.3.0'
implementation 'org.jsoup:jsoup:1.15.3' implementation 'org.jsoup:jsoup:1.15.3'

View File

@ -24,7 +24,7 @@ public class OkHttpUtil {
public static OkHttpClient defaultClient() { public static OkHttpClient defaultClient() {
synchronized (lockO) { synchronized (lockO) {
if (defaultClient == null) { if (defaultClient == null) {
OkHttpClient.Builder builder = new OkHttpClient.Builder().dns(safeDns()).readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS).writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS).connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS).retryOnConnectionFailure(true).sslSocketFactory(new SSLSocketFactoryCompat(), SSLSocketFactoryCompat.trustAllCert); OkHttpClient.Builder builder = new OkHttpClient.Builder().dns(safeDns()).readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS).writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS).connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS).retryOnConnectionFailure(true).hostnameVerifier(SSLSocketFactoryCompat.hostnameVerifier).sslSocketFactory(new SSLSocketFactoryCompat(), SSLSocketFactoryCompat.trustAllCert);
defaultClient = builder.build(); defaultClient = builder.build();
} }
return defaultClient; return defaultClient;

View File

@ -5,9 +5,13 @@ import java.net.InetAddress;
import java.net.Socket; import java.net.Socket;
import java.security.GeneralSecurityException; import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.SSLSocketFactory;
@ -15,6 +19,8 @@ import javax.net.ssl.X509TrustManager;
public class SSLSocketFactoryCompat extends SSLSocketFactory { public class SSLSocketFactoryCompat extends SSLSocketFactory {
public static final HostnameVerifier hostnameVerifier = (hostname, session) -> true;
public static final X509TrustManager trustAllCert = new X509TrustManager() { public static final X509TrustManager trustAllCert = new X509TrustManager() {
@Override @Override
@ -41,6 +47,12 @@ public class SSLSocketFactoryCompat extends SSLSocketFactory {
List<String> protocols = new LinkedList<>(); List<String> protocols = new LinkedList<>();
for (String protocol : socket.getSupportedProtocols()) if (!protocol.toUpperCase().contains("SSL")) protocols.add(protocol); for (String protocol : socket.getSupportedProtocols()) if (!protocol.toUpperCase().contains("SSL")) protocols.add(protocol);
SSLSocketFactoryCompat.protocols = protocols.toArray(new String[protocols.size()]); SSLSocketFactoryCompat.protocols = protocols.toArray(new String[protocols.size()]);
List<String> allowedCiphers = Arrays.asList("TLS_RSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "TLS_ECHDE_RSA_WITH_AES_128_GCM_SHA256", "TLS_RSA_WITH_3DES_EDE_CBC_SHA", "TLS_RSA_WITH_AES_128_CBC_SHA", "TLS_RSA_WITH_AES_256_CBC_SHA", "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA");
List<String> availableCiphers = Arrays.asList(socket.getSupportedCipherSuites());
HashSet<String> preferredCiphers = new HashSet<>(allowedCiphers);
preferredCiphers.retainAll(availableCiphers);
preferredCiphers.addAll(new HashSet<>(Arrays.asList(socket.getEnabledCipherSuites())));
SSLSocketFactoryCompat.cipherSuites = preferredCiphers.toArray(new String[preferredCiphers.size()]);
} }
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
@ -54,8 +66,9 @@ public class SSLSocketFactoryCompat extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS"); SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new X509TrustManager[]{SSLSocketFactoryCompat.trustAllCert}, null); sslContext.init(null, new X509TrustManager[]{SSLSocketFactoryCompat.trustAllCert}, null);
defaultFactory = sslContext.getSocketFactory(); defaultFactory = sslContext.getSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(defaultFactory);
} catch (GeneralSecurityException e) { } catch (GeneralSecurityException e) {
throw new AssertionError(); // The system has no TLS. Just give up. throw new AssertionError();
} }
} }
@ -63,6 +76,9 @@ public class SSLSocketFactoryCompat extends SSLSocketFactory {
if (protocols != null) { if (protocols != null) {
ssl.setEnabledProtocols(protocols); ssl.setEnabledProtocols(protocols);
} }
if (cipherSuites != null) {
ssl.setEnabledCipherSuites(cipherSuites);
}
} }
@Override @Override

Binary file not shown.

View File

@ -1 +1 @@
0253ba01e6a8e8f11716139823b8baab e889b257fb9dbaf519f3c095231c12ea