package org.ws4d.java.communication.connection.tcp; import java.io.IOException; import javax.net.ssl.KeyManager; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLServerSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509KeyManager; import org.ws4d.java.DPWSFramework; import org.ws4d.java.communication.connection.ip.IPAddress; import org.ws4d.java.security.ForcedAliasKeyManager; public class SESecureServerSocket implements ServerSocket { private IPAddress ipAddress = null; private int port = -1; java.net.ServerSocket server = null; private String alias = null; /** * The number of attempts to find a random port to listen to before giving * up. */ protected static final int PORT_RETRIES = 3; public SESecureServerSocket(IPAddress address, int port, String alias) throws IOException { this.alias = alias; this.ipAddress = address; this.port = port; try { javax.net.ServerSocketFactory ssf = this.getSSLServerSocketFactory(); server = ssf.createServerSocket(port); } catch (IOException e) { throw new IOException(e.getMessage() + "For " + address + " at port " + port); } catch (Exception e) { e.printStackTrace(); } } /* * (non-Javadoc) * @see org.ws4d.java.communication.connection.tcp.ServerSocket#accept() */ public Socket accept() throws IOException { return new SESecureSocket(server.accept()); } /* * (non-Javadoc) * @see org.ws4d.java.communication.connection.tcp.ServerSocket#close() */ public void close() throws IOException { server.close(); } /* * (non-Javadoc) * @see org.ws4d.java.communication.connection.tcp.ServerSocket#getAddress() */ public IPAddress getIPAddress() { return ipAddress; } /* * (non-Javadoc) * @see org.ws4d.java.communication.connection.tcp.ServerSocket#getPort() */ public int getPort() { return port; } protected SSLServerSocketFactory getSSLServerSocketFactory() throws IOException, Exception { KeyManager[] kms = (KeyManager[]) DPWSFramework.getSecurityManager().getKeyManagers(); TrustManager[] tms = (TrustManager[]) DPWSFramework.getSecurityManager().getTrustManagers(); if (alias != null) { for (int i = 0; i < kms.length; i++) { if (kms[i] instanceof X509KeyManager) kms[i] = new ForcedAliasKeyManager((X509KeyManager) kms[i], alias); } } SSLContext context = SSLContext.getInstance("SSL"); context.init(kms, tms, null); SSLServerSocketFactory ssf = context.getServerSocketFactory(); return ssf; } }