/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.bsc.ssl; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.X509TrustManager; /** * * @author bsorrentino */ public class SSLCertificateInfo { boolean ignore = false; String hostnameVerifierClass; String trustManagerClass; protected static <T> T newClass(final String clazz, final Class<T> type) { try { final Class<?> loadedClass = Thread.currentThread().getContextClassLoader().loadClass(clazz); //create an instance of loaded class i.e. with newInstance (just works for classes with non-arg const). final Object initClass = loadedClass.newInstance(); return type.cast(initClass); } catch (final ClassNotFoundException e) { final String msg = String.format("Could not found Class with name %s", clazz); throw new IllegalStateException( msg, e); } catch (final InstantiationException e){ final String msg = String.format("Could create Instance of Class with name %s. Class must be concrete.",clazz); throw new IllegalStateException(msg, e); }catch (final IllegalAccessException e){ final String msg = String.format("Could create Instance of Class with name %s. Class must have a no-arg constructor.",clazz); throw new IllegalStateException(msg, e); } } public final boolean isIgnore() { return ignore; } public X509TrustManager getTrustManager() { final X509TrustManager trustManager = (trustManagerClass != null) ? newClass(trustManagerClass, X509TrustManager.class) : new YesTrustManager(); return trustManager; } public SSLSocketFactory getSSLSocketFactory() { try { final SSLSocketFactory sslSocketFactory = SSLFactories.newInstance( getTrustManager() ); return sslSocketFactory; } catch (Exception ex) { throw new IllegalStateException(ex); } } public HostnameVerifier getHostnameVerifier() { final HostnameVerifier hostnameVerifier = (hostnameVerifierClass != null ? newClass(hostnameVerifierClass, HostnameVerifier.class) : new YesHostnameVerifier()); return hostnameVerifier; } @Override public String toString() { return new StringBuilder() .append("SSLCertificate") .append('{') .append("ignore:").append(ignore).append(',') .append("hostnameVerifierClass:'").append(hostnameVerifierClass).append("',") .append("trustManagerClass:'").append(trustManagerClass).append(',') .append('}') .toString(); } }