package org.httpkit.client; import javax.net.ssl.*; import java.security.InvalidAlgorithmParameterException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; public class SslContextFactory { private static final String PROTOCOL = "TLS"; private static final SSLContext CLIENT_CONTEXT; static { SSLContext clientContext = null; try { clientContext = SSLContext.getInstance(PROTOCOL); clientContext.init(null, TrustManagerFactory.getTrustManagers(), null); } catch (Exception e) { throw new Error( "Failed to initialize the client-side SSLContext", e); } CLIENT_CONTEXT = clientContext; } public static SSLContext getClientContext() { return CLIENT_CONTEXT; } public static SSLEngine trustAnybody() { return CLIENT_CONTEXT.createSSLEngine(); } } class TrustManagerFactory extends TrustManagerFactorySpi { private static final TrustManager DUMMY_TRUST_MANAGER = new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { // Always trust } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { // Always trust } }; public static TrustManager[] getTrustManagers() { return new TrustManager[]{DUMMY_TRUST_MANAGER}; } @Override protected TrustManager[] engineGetTrustManagers() { return getTrustManagers(); } @Override protected void engineInit(KeyStore keystore) throws KeyStoreException { // Unused } @Override protected void engineInit( ManagerFactoryParameters managerFactoryParameters) throws InvalidAlgorithmParameterException { // Unused } }