From e2eff795778ffbba93e0d98db3f243dec0a24601 Mon Sep 17 00:00:00 2001 From: NekoInverter <7741672-NekoInverter@users.noreply.gitlab.com> Date: Wed, 16 Dec 2020 23:22:01 +0800 Subject: [PATCH] Fix domain fronting for old android versions --- .../com/hippo/ehviewer/EhApplication.java | 26 +++++++++---------- .../ehviewer/client/EhSSLSocketFactory.java | 9 +++++-- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index 4b4009d1e..7c52c4209 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -151,21 +151,19 @@ public class EhApplication extends RecordingApplication { .hostnameVerifier((hostname, session) -> true) .dns(new EhDns(application)) .proxySelector(getEhProxySelector(application)); - if (Settings.getDF()) { - try { - TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( - TrustManagerFactory.getDefaultAlgorithm()); - trustManagerFactory.init((KeyStore) null); - TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); - if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { - throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers)); - } - X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; - builder.sslSocketFactory(new EhSSLSocketFactory(), trustManager); - } catch (Exception e) { - e.printStackTrace(); - builder.sslSocketFactory(new EhSSLSocketFactory(), new EhX509TrustManager()); + try { + TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( + TrustManagerFactory.getDefaultAlgorithm()); + trustManagerFactory.init((KeyStore) null); + TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); + if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) { + throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers)); } + X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; + builder.sslSocketFactory(new EhSSLSocketFactory(), trustManager); + } catch (Exception e) { + e.printStackTrace(); + builder.sslSocketFactory(new EhSSLSocketFactory(), new EhX509TrustManager()); } application.mOkHttpClient = builder.build(); } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhSSLSocketFactory.java b/app/src/main/java/com/hippo/ehviewer/client/EhSSLSocketFactory.java index 5b1d4b525..d06cec122 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhSSLSocketFactory.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhSSLSocketFactory.java @@ -8,6 +8,8 @@ import java.io.IOException; import java.net.InetAddress; import java.net.Socket; +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; public class EhSSLSocketFactory extends SSLSocketFactory { @@ -27,9 +29,12 @@ public class EhSSLSocketFactory extends SSLSocketFactory { return ((SSLSocketFactory) getDefault()).createSocket(s, host, port, autoClose); } InetAddress address = s.getInetAddress(); - Log.d("EhSSLSocketFactory", "Host: " + host + " Address: " + address.getHostAddress()); if (autoClose) s.close(); - return getDefault().createSocket(address, port); + SSLSocket socket = (SSLSocket) getDefault().createSocket(address, port); + SSLSession sslSession = socket.getSession(); + Log.d("EhSSLSocketFactory", "Host: " + host + " Address: " + address.getHostAddress() + " Protocol:" + sslSession.getProtocol() + " CipherSuite:" + sslSession.getCipherSuite()); + socket.setEnabledProtocols(socket.getSupportedProtocols()); + return socket; } @Override