package com.asolutions.scmsshd.ssl; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.security.GeneralSecurityException; import java.security.cert.X509Certificate; import javax.net.SocketFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PromiscuousSSLSocketFactory extends SocketFactory { protected final Logger log = LoggerFactory.getLogger(getClass()); private static SocketFactory blindFactory = null; /** * * Builds an all trusting "blind" ssl socket factory. * */ static { // create a trust manager that will purposefully fall down on the // job TrustManager[] blindTrustMan = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] c, String a) { } public void checkServerTrusted(X509Certificate[] c, String a) { } } }; // create our "blind" ssl socket factory with our lazy trust manager try { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, blindTrustMan, new java.security.SecureRandom()); blindFactory = sc.getSocketFactory(); } catch (GeneralSecurityException e) { LoggerFactory.getLogger(PromiscuousSSLSocketFactory.class).error("Error taking security promiscuous" , e); } } /** * * @see javax.net.SocketFactory#getDefault() * */ public static SocketFactory getDefault() { return new PromiscuousSSLSocketFactory(); } /** * * @see javax.net.SocketFactory#createSocket(java.lang.String, int) * */ @Override public Socket createSocket(String arg0, int arg1) throws IOException, UnknownHostException { return blindFactory.createSocket(arg0, arg1); } /** * * @see javax.net.SocketFactory#createSocket(java.net.InetAddress, int) * */ @Override public Socket createSocket(InetAddress arg0, int arg1) throws IOException { return blindFactory.createSocket(arg0, arg1); } /** * * @see javax.net.SocketFactory#createSocket(java.lang.String, int, * * java.net.InetAddress, int) * */ @Override public Socket createSocket(String arg0, int arg1, InetAddress arg2, int arg3) throws IOException, UnknownHostException { return blindFactory.createSocket(arg0, arg1, arg2, arg3); } /** * * @see javax.net.SocketFactory#createSocket(java.net.InetAddress, int, * * java.net.InetAddress, int) * */ @Override public Socket createSocket(InetAddress arg0, int arg1, InetAddress arg2, int arg3) throws IOException { return blindFactory.createSocket(arg0, arg1, arg2, arg3); } }