1 16 17 18 package org.apache.xmlrpc.secure.sunssl; 19 20 import java.net.URL ; 21 import java.security.GeneralSecurityException ; 22 import java.security.SecureRandom ; 23 import java.security.Security ; 24 import java.security.cert.X509Certificate ; 25 import java.util.Properties ; 26 27 import org.apache.xmlrpc.DefaultXmlRpcTransport; 28 import org.apache.xmlrpc.XmlRpcTransport; 29 import org.apache.xmlrpc.XmlRpcTransportFactory; 30 import org.apache.xmlrpc.secure.SecurityTool; 31 32 import com.sun.net.ssl.HostnameVerifier; 33 import com.sun.net.ssl.HttpsURLConnection; 34 import com.sun.net.ssl.SSLContext; 35 import com.sun.net.ssl.X509TrustManager; 36 37 47 public class SunSSLTransportFactory implements XmlRpcTransportFactory 48 { 49 protected URL url; 50 protected String auth; 51 52 public static final String TRANSPORT_TRUSTMANAGER = "hostnameverifier"; 53 public static final String TRANSPORT_HOSTNAMEVERIFIER = "trustmanager"; 54 55 private static X509TrustManager openTrustManager = new X509TrustManager() 57 { 58 public boolean isClientTrusted(X509Certificate [] chain) 59 { 60 return true; 61 } 62 63 public boolean isServerTrusted(X509Certificate [] chain) 64 { 65 return true; 66 } 67 68 public X509Certificate [] getAcceptedIssuers() 69 { 70 return null; 71 } 72 }; 73 74 private static HostnameVerifier openHostnameVerifier = new HostnameVerifier() 76 { 77 public boolean verify(String hostname, String session) 78 { 79 return true; 80 } 81 }; 82 83 public static Properties getProperties() 84 { 85 Properties properties = new Properties (); 86 87 properties.setProperty(XmlRpcTransportFactory.TRANSPORT_URL, "(java.net.URL) - URL to connect to"); 88 properties.setProperty(XmlRpcTransportFactory.TRANSPORT_AUTH, "(java.lang.String) - HTTP Basic Authentication string (encoded)."); 89 properties.setProperty(TRANSPORT_TRUSTMANAGER, "(com.sun.net.ssl.X509TrustManager) - X.509 Trust Manager to use"); 90 properties.setProperty(TRANSPORT_HOSTNAMEVERIFIER, "(com.sun.net.ssl.HostnameVerifier) - Hostname verifier to use"); 91 92 return properties; 93 } 94 95 public SunSSLTransportFactory(Properties properties) 96 throws GeneralSecurityException 97 { 98 X509TrustManager trustManager; 99 HostnameVerifier hostnameVerifier; 100 SSLContext sslContext; 101 102 Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 103 104 url = (URL ) properties.get(XmlRpcTransportFactory.TRANSPORT_URL); 105 auth = properties.getProperty(XmlRpcTransportFactory.TRANSPORT_AUTH); 106 107 trustManager = (X509TrustManager) properties.get(TRANSPORT_TRUSTMANAGER); 108 if (trustManager == null) 109 { 110 trustManager = openTrustManager; 111 } 112 113 hostnameVerifier = (HostnameVerifier) properties.get(TRANSPORT_HOSTNAMEVERIFIER); 114 if (hostnameVerifier == null) 115 { 116 hostnameVerifier = openHostnameVerifier; 117 } 118 119 sslContext = SSLContext.getInstance(SecurityTool.getSecurityProtocol()); 120 X509TrustManager[] tmArray = new X509TrustManager[] { trustManager }; 121 sslContext.init(null, tmArray, new SecureRandom ()); 122 123 if (sslContext != null) 126 { 127 HttpsURLConnection.setDefaultSSLSocketFactory( 128 sslContext.getSocketFactory()); 129 } 130 HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); 131 } 132 133 public XmlRpcTransport createTransport() 134 { 135 return new DefaultXmlRpcTransport(url, auth); 136 } 137 138 public void setProperty(String propertyName, Object value) 139 { 140 if (TRANSPORT_AUTH.equals(propertyName)) 141 { 142 auth = (String ) value; 143 } 144 else if (TRANSPORT_URL.equals(propertyName)) 145 { 146 url = (URL ) value; 147 } 148 } 149 } 150 | Popular Tags |