1 22 package org.jboss.test.pooled.test; 23 24 import java.net.URL ; 25 import java.security.cert.Certificate ; 26 import java.security.cert.X509Certificate ; 27 import java.security.Principal ; 28 import java.rmi.RemoteException ; 29 import javax.naming.InitialContext ; 30 import javax.net.ssl.HandshakeCompletedEvent; 31 import javax.net.ssl.HandshakeCompletedListener; 32 import javax.net.ssl.SSLPeerUnverifiedException; 33 import javax.net.ssl.SSLSession; 34 35 import junit.framework.Test; 36 import org.jboss.security.ssl.DomainSocketFactory; 37 import org.jboss.test.JBossTestCase; 38 import org.jboss.test.pooled.interfaces.StatelessSession; 39 import org.jboss.test.pooled.interfaces.StatelessSessionHome; 40 41 48 public class SSLSocketsUnitTestCase extends JBossTestCase 49 implements HandshakeCompletedListener 50 { 51 private String cipherSuite; 52 private Certificate [] localCerts; 53 private Certificate [] peerCerts; 54 55 60 public SSLSocketsUnitTestCase(String name) 61 { 62 super(name); 63 } 64 65 70 public void testClientCertSSLAccess() throws Exception 71 { 72 log.info("+++ testClientCertSSLAccess"); 73 String res = super.getResourceURL("test-configs/tomcat-ssl/conf/client.keystore"); 74 log.info("client.keystore: "+res); 75 URL clientURL = new URL (res); 76 System.setProperty("javax.net.ssl.trustStore", clientURL.getFile()); 77 System.setProperty("javax.net.ssl.trustStorePassword", "unit-tests-client"); 78 System.setProperty("javax.net.ssl.keyStore", clientURL.getFile()); 79 System.setProperty("javax.net.ssl.keyStorePassword", "unit-tests-client"); 80 System.getProperties().put(DomainSocketFactory.HANDSHAKE_COMPLETE_LISTENER, this); 82 83 InitialContext jndiContext = new InitialContext (); 84 log.debug("Lookup StatelessSessionWithPooledSSL"); 85 Object obj = jndiContext.lookup("StatelessSessionWithPooledSSL"); 86 StatelessSessionHome home = (StatelessSessionHome)obj; 87 log.debug("Found StatelessSessionWithPooledSSL Home"); 88 StatelessSession bean = home.create(); 89 log.debug("Created StatelessSessionWithPooledSSL"); 90 Principal p = bean.echoCaller("testClientCertSSLAccess"); 91 log.debug("bean.echoCaller(testClientCertSSLAccess) = " + p); 92 try 93 { 94 bean.noop(); 95 fail("Should not have been able to call noop"); 96 } 97 catch(RemoteException e) 98 { 99 log.debug("noop failed as expected", e); 100 } 101 bean.remove(); 102 103 assertTrue("CipherSuite = TLS_DHE_DSS_WITH_AES_128_CBC_SHA", 105 cipherSuite.equals("TLS_DHE_DSS_WITH_AES_128_CBC_SHA")); 106 X509Certificate localCert = (X509Certificate ) localCerts[0]; 107 assertTrue("LocalCert.SubjectDN = CN=unit-tests-client, OU=JBoss Inc., O=JBoss Inc., ST=Washington, C=US", 108 localCert.getSubjectDN().getName().equals("CN=unit-tests-client, OU=JBoss Inc., O=JBoss Inc., ST=Washington, C=US")); 109 } 110 111 public void handshakeCompleted(HandshakeCompletedEvent event) 112 { 113 log.info("handshakeCompleted, event="+event); 114 try 115 { 116 cipherSuite = event.getCipherSuite(); 117 log.info("CipherSuite: "+cipherSuite); 118 localCerts = event.getLocalCertificates(); 119 log.info("LocalCertificates:"); 120 for(int n = 0; n < localCerts.length; n ++) 121 { 122 Certificate cert = localCerts[n]; 123 log.info(cert); 124 } 125 log.info("PeerCertificates:"); 126 peerCerts = event.getPeerCertificates(); 127 for(int n = 0; n < peerCerts.length; n ++) 128 { 129 Certificate cert = peerCerts[n]; 130 log.info(cert); 131 } 132 133 SSLSession session = event.getSession(); 134 String [] names = session.getValueNames(); 135 for(int n = 0; n < names.length; n ++) 136 { 137 String name = names[n]; 138 log.info(name+"="+session.getValue(name)); 139 } 140 } 141 catch (SSLPeerUnverifiedException e) 142 { 143 log.error("Failed to get peer cert", e); 144 } 145 } 146 147 public static Test suite() throws Exception 148 { 149 return getDeploySetup(SSLSocketsUnitTestCase.class, "pooled.jar"); 150 } 151 152 } 153 | Popular Tags |