1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.apache.commons.httpclient.ssl;
31
32 import java.io.IOException;
33 import java.net.ServerSocket;
34 import java.net.URL;
35 import java.security.KeyStore;
36
37 import javax.net.ServerSocketFactory;
38
39 import org.apache.commons.httpclient.server.SimpleSocketFactory;
40 import org.apache.commons.logging.Log;
41 import org.apache.commons.logging.LogFactory;
42
43 import com.sun.net.ssl.KeyManager;
44 import com.sun.net.ssl.KeyManagerFactory;
45 import com.sun.net.ssl.SSLContext;
46
47 /***
48 * Defines a SSL socket factory
49 *
50 * @author Oleg Kalnichevski
51 */
52 public class SimpleSSLSocketFactory implements SimpleSocketFactory {
53
54 private static final Log LOG = LogFactory.getLog(SimpleSocketFactory.class);
55
56 private static SSLContext SSLCONTEXT = null;
57
58 private static SSLContext createSSLContext() {
59 try {
60 ClassLoader cl = SimpleSocketFactory.class.getClassLoader();
61 URL url = cl.getResource("org/apache/commons/httpclient/ssl/simpleserver.keystore");
62 KeyStore keystore = KeyStore.getInstance("jks");
63 keystore.load(url.openStream(), "nopassword".toCharArray());
64 KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(
65 KeyManagerFactory.getDefaultAlgorithm());
66 kmfactory.init(keystore, "nopassword".toCharArray());
67 KeyManager[] keymanagers = kmfactory.getKeyManagers();
68 SSLContext sslcontext = SSLContext.getInstance("TLS");
69 sslcontext.init(keymanagers, null, null);
70 return sslcontext;
71 } catch (Exception ex) {
72
73
74 LOG.error(ex.getMessage(), ex);
75 throw new IllegalStateException(ex.getMessage());
76 }
77
78 }
79
80 private static SSLContext getSSLContext() {
81 if (SSLCONTEXT == null) {
82 SSLCONTEXT = createSSLContext();
83 }
84 return SSLCONTEXT;
85 }
86
87 public SimpleSSLSocketFactory() {
88 super();
89 }
90
91 public ServerSocket createServerSocket(int port) throws IOException {
92 ServerSocketFactory socketfactory = getSSLContext().getServerSocketFactory();
93 return socketfactory.createServerSocket(port);
94 }
95
96 }