package com.framework.okhttp.cookie; import java.io.InputStream; import java.security.KeyStore; import java.security.SecureRandom; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManagerFactory; import okhttp3.OkHttpClient; /** * Created by CaiYiMing on 2015/12/19. */ public class HttpsCoder { /** * 协议 * 支持TLS和SSL协议 */ public static final String PROTOCOL = "TLS"; /** * @param is * @param password * @return keyStore * @throws Exception */ private static KeyStore getKeyStore(InputStream is, String password) throws Exception { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(is, password.toCharArray()); return keyStore; } private static SSLSocketFactory getSSLSocketFactory(InputStream keyStoreInputStream, String password) throws Exception { KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); KeyStore keyStore = getKeyStore(keyStoreInputStream, password); keyManagerFactory.init(keyStore, password.toCharArray()); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); SSLContext context = SSLContext.getInstance(PROTOCOL); context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom()); keyStoreInputStream.close(); return context.getSocketFactory(); } public static void configSSLSocketFactory(OkHttpClient client, InputStream keyStoreInputStream, String password) throws Exception { SSLSocketFactory socketFactory = getSSLSocketFactory(keyStoreInputStream, password); client.newBuilder().sslSocketFactory(socketFactory); } public static void configSSLSocketFactory(HttpsURLConnection conn, InputStream keyStoreInputStream, String password) throws Exception { SSLSocketFactory socketFactory = getSSLSocketFactory(keyStoreInputStream, password); conn.setSSLSocketFactory(socketFactory); } }