mirror of https://github.com/FongMi/TV.git
parent
90565e952e
commit
8ce9a09b39
@ -0,0 +1,101 @@ |
||||
package com.github.catvod.net; |
||||
|
||||
import android.annotation.SuppressLint; |
||||
|
||||
import org.conscrypt.Conscrypt; |
||||
|
||||
import java.io.IOException; |
||||
import java.net.InetAddress; |
||||
import java.net.Socket; |
||||
import java.security.Provider; |
||||
import java.security.Security; |
||||
import java.security.cert.X509Certificate; |
||||
|
||||
import javax.net.ssl.HostnameVerifier; |
||||
import javax.net.ssl.HttpsURLConnection; |
||||
import javax.net.ssl.SSLContext; |
||||
import javax.net.ssl.SSLSocket; |
||||
import javax.net.ssl.SSLSocketFactory; |
||||
import javax.net.ssl.TrustManager; |
||||
import javax.net.ssl.X509TrustManager; |
||||
|
||||
public class SSLCompat extends SSLSocketFactory { |
||||
|
||||
public static final HostnameVerifier VERIFIER = (hostname, session) -> true; |
||||
|
||||
private SSLSocketFactory factory; |
||||
|
||||
public SSLCompat() { |
||||
try { |
||||
Provider provider = Conscrypt.newProvider(); |
||||
Security.insertProviderAt(provider, 1); |
||||
SSLContext context = SSLContext.getInstance("TLS", provider); |
||||
context.init(null, new TrustManager[]{TM}, null); |
||||
factory = context.getSocketFactory(); |
||||
HttpsURLConnection.setDefaultSSLSocketFactory(factory); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public String[] getDefaultCipherSuites() { |
||||
return factory.getDefaultCipherSuites(); |
||||
} |
||||
|
||||
@Override |
||||
public String[] getSupportedCipherSuites() { |
||||
return factory.getSupportedCipherSuites(); |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket() throws IOException { |
||||
return enableTLSOnSocket(factory.createSocket()); |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { |
||||
return enableTLSOnSocket(factory.createSocket(s, host, port, autoClose)); |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(String host, int port) throws IOException { |
||||
return enableTLSOnSocket(factory.createSocket(host, port)); |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException { |
||||
return enableTLSOnSocket(factory.createSocket(host, port, localHost, localPort)); |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(InetAddress host, int port) throws IOException { |
||||
return enableTLSOnSocket(factory.createSocket(host, port)); |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { |
||||
return enableTLSOnSocket(factory.createSocket(address, port, localAddress, localPort)); |
||||
} |
||||
|
||||
private Socket enableTLSOnSocket(Socket socket) { |
||||
if (socket instanceof SSLSocket) ((SSLSocket) socket).setEnabledProtocols(new String[]{"TLSv1.2", "TLSv1.3"}); |
||||
return socket; |
||||
} |
||||
|
||||
@SuppressLint({"TrustAllX509TrustManager", "CustomX509TrustManager"}) |
||||
public static final X509TrustManager TM = new X509TrustManager() { |
||||
@Override |
||||
public void checkClientTrusted(X509Certificate[] chain, String authType) { |
||||
} |
||||
|
||||
@Override |
||||
public void checkServerTrusted(X509Certificate[] chain, String authType) { |
||||
} |
||||
|
||||
@Override |
||||
public X509Certificate[] getAcceptedIssuers() { |
||||
return new X509Certificate[]{}; |
||||
} |
||||
}; |
||||
} |
||||
@ -1,116 +0,0 @@ |
||||
package com.github.catvod.net; |
||||
|
||||
import java.io.IOException; |
||||
import java.net.InetAddress; |
||||
import java.net.Socket; |
||||
import java.security.GeneralSecurityException; |
||||
import java.security.cert.X509Certificate; |
||||
import java.util.LinkedList; |
||||
import java.util.List; |
||||
|
||||
import javax.net.ssl.HostnameVerifier; |
||||
import javax.net.ssl.HttpsURLConnection; |
||||
import javax.net.ssl.SSLContext; |
||||
import javax.net.ssl.SSLSocket; |
||||
import javax.net.ssl.SSLSocketFactory; |
||||
import javax.net.ssl.X509TrustManager; |
||||
|
||||
public class SSLSocketFactoryCompat extends SSLSocketFactory { |
||||
|
||||
public static final HostnameVerifier hostnameVerifier = (hostname, session) -> true; |
||||
|
||||
public static final X509TrustManager trustAllCert = new X509TrustManager() { |
||||
@Override |
||||
public void checkClientTrusted(X509Certificate[] chain, String authType) { |
||||
} |
||||
|
||||
@Override |
||||
public void checkServerTrusted(X509Certificate[] chain, String authType) { |
||||
} |
||||
|
||||
@Override |
||||
public X509Certificate[] getAcceptedIssuers() { |
||||
return new X509Certificate[]{}; |
||||
} |
||||
}; |
||||
|
||||
static String[] protocols = null; |
||||
static String[] cipherSuites = null; |
||||
|
||||
static { |
||||
try { |
||||
SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(); |
||||
if (socket != null) { |
||||
List<String> protocols = new LinkedList<>(); |
||||
for (String protocol : socket.getSupportedProtocols()) if (!protocol.toUpperCase().contains("SSL")) protocols.add(protocol); |
||||
SSLSocketFactoryCompat.protocols = protocols.toArray(new String[protocols.size()]); |
||||
} |
||||
} catch (IOException e) { |
||||
throw new RuntimeException(e); |
||||
} |
||||
} |
||||
|
||||
private final SSLSocketFactory defaultFactory; |
||||
|
||||
public SSLSocketFactoryCompat() { |
||||
try { |
||||
SSLContext sslContext = SSLContext.getInstance("TLS"); |
||||
sslContext.init(null, new X509TrustManager[]{SSLSocketFactoryCompat.trustAllCert}, null); |
||||
defaultFactory = sslContext.getSocketFactory(); |
||||
HttpsURLConnection.setDefaultSSLSocketFactory(defaultFactory); |
||||
} catch (GeneralSecurityException e) { |
||||
throw new AssertionError(); |
||||
} |
||||
} |
||||
|
||||
private void upgradeTLS(SSLSocket ssl) { |
||||
if (protocols != null) { |
||||
ssl.setEnabledProtocols(protocols); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public String[] getDefaultCipherSuites() { |
||||
return cipherSuites; |
||||
} |
||||
|
||||
@Override |
||||
public String[] getSupportedCipherSuites() { |
||||
return cipherSuites; |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { |
||||
Socket ssl = defaultFactory.createSocket(s, host, port, autoClose); |
||||
if (ssl instanceof SSLSocket) upgradeTLS((SSLSocket) ssl); |
||||
return ssl; |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(String host, int port) throws IOException { |
||||
Socket ssl = defaultFactory.createSocket(host, port); |
||||
if (ssl instanceof SSLSocket) upgradeTLS((SSLSocket) ssl); |
||||
return ssl; |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException { |
||||
Socket ssl = defaultFactory.createSocket(host, port, localHost, localPort); |
||||
if (ssl instanceof SSLSocket) upgradeTLS((SSLSocket) ssl); |
||||
return ssl; |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(InetAddress host, int port) throws IOException { |
||||
Socket ssl = defaultFactory.createSocket(host, port); |
||||
if (ssl instanceof SSLSocket) upgradeTLS((SSLSocket) ssl); |
||||
return ssl; |
||||
} |
||||
|
||||
@Override |
||||
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { |
||||
Socket ssl = defaultFactory.createSocket(address, port, localAddress, localPort); |
||||
if (ssl instanceof SSLSocket) upgradeTLS((SSLSocket) ssl); |
||||
return ssl; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue