Last active
September 11, 2019 15:17
-
-
Save beilly/34441578da073058ca90a9b9b8f288ba to your computer and use it in GitHub Desktop.
Volley Stack with default HttpsURLConnection, and it will trusting all certificates
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.beilly.utils.net; | |
import android.content.Context; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.security.KeyManagementException; | |
import java.security.KeyStore; | |
import java.security.KeyStoreException; | |
import java.security.NoSuchAlgorithmException; | |
import java.security.SecureRandom; | |
import javax.net.ssl.HostnameVerifier; | |
import javax.net.ssl.HttpsURLConnection; | |
import javax.net.ssl.SSLContext; | |
import javax.net.ssl.SSLSession; | |
import javax.net.ssl.SSLSocketFactory; | |
import javax.net.ssl.TrustManager; | |
import javax.net.ssl.TrustManagerFactory; | |
import javax.net.ssl.X509TrustManager; | |
import java.security.cert.Certificate; | |
import java.security.cert.CertificateException; | |
import java.security.cert.CertificateFactory; | |
import java.security.cert.X509Certificate; | |
/** | |
* Created by Administrator on 2015/10/15. | |
*/ | |
public class FakeX509TrustManager implements X509TrustManager { | |
private static TrustManager[] trustManagers; | |
private static final X509Certificate[] _AcceptedIssuers = new | |
X509Certificate[] {}; | |
@Override | |
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { | |
//To change body of implemented methods use File | Settings | File Templates. | |
} | |
@Override | |
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { | |
//To change body of implemented methods use File | Settings | File Templates. | |
} | |
public boolean isClientTrusted(X509Certificate[] chain) { | |
return true; | |
} | |
public boolean isServerTrusted(X509Certificate[] chain) { | |
return true; | |
} | |
@Override | |
public X509Certificate[] getAcceptedIssuers() { | |
return _AcceptedIssuers; | |
} | |
public static void allowAllSSL() { | |
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { | |
@Override | |
public boolean verify(String arg0, SSLSession arg1) { | |
return true; | |
} | |
}); | |
SSLContext context = null; | |
if (trustManagers == null) { | |
trustManagers = new TrustManager[] { new FakeX509TrustManager() }; | |
} | |
try { | |
context = SSLContext.getInstance("TLS"); | |
context.init(null, trustManagers, new SecureRandom()); | |
} catch (NoSuchAlgorithmException e) { | |
e.printStackTrace(); | |
} catch (KeyManagementException e) { | |
e.printStackTrace(); | |
} | |
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); | |
} | |
//生成SSLSocketFactory | |
public static SSLSocketFactory initSSLSocketFactory(Context context, String fileName) { | |
//生成证书:Certificate | |
CertificateFactory cf = null; | |
SSLSocketFactory factory = null; | |
try { | |
cf = CertificateFactory.getInstance("X.509"); | |
InputStream caInput = context.getAssets().open(fileName); | |
Certificate ca = null; | |
try { | |
ca = cf.generateCertificate(caInput); | |
} finally { | |
try { | |
caInput.close(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
//初始化公钥:keyStore | |
String keyType = KeyStore.getDefaultType(); | |
KeyStore keyStore = KeyStore.getInstance(keyType); | |
keyStore.load(null, null); | |
keyStore.setCertificateEntry("ca", ca); | |
//初始化TrustManagerFactory | |
String algorithm = TrustManagerFactory.getDefaultAlgorithm(); | |
TrustManagerFactory managerFactory = TrustManagerFactory.getInstance(algorithm); | |
managerFactory.init(keyStore); | |
//初始化sslContext | |
SSLContext sslContext = SSLContext.getInstance("TLS"); | |
sslContext.init(null, managerFactory.getTrustManagers(), null); | |
factory = sslContext.getSocketFactory(); | |
} catch (CertificateException e) { | |
e.printStackTrace(); | |
} catch (NoSuchAlgorithmException e) { | |
e.printStackTrace(); | |
} catch (KeyStoreException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} catch (KeyManagementException e) { | |
e.printStackTrace(); | |
} | |
return factory; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
添加了指定https证书,实现防止客户端被抓包