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
31 package org.apache.commons.httpclient.ssl;
32
33 import java.io.IOException;
34 import java.io.InputStream;
35 import java.net.ServerSocket;
36 import java.net.URL;
37 import java.security.KeyStore;
38
39 import javax.net.ServerSocketFactory;
40
41 import org.apache.commons.httpclient.server.SimpleSocketFactory;
42 import org.apache.commons.logging.Log;
43 import org.apache.commons.logging.LogFactory;
44
45 import com.sun.net.ssl.KeyManager;
46 import com.sun.net.ssl.KeyManagerFactory;
47 import com.sun.net.ssl.SSLContext;
48
49 /***
50 * Defines a SSL socket factory
51 *
52 * @author Oleg Kalnichevski
53 */
54 public class SimpleSSLSocketFactory implements SimpleSocketFactory {
55
56 private static final Log LOG = LogFactory.getLog(SimpleSocketFactory.class);
57
58 private static SSLContext SSLCONTEXT = null;
59
60 private static SSLContext createSSLContext() {
61 try {
62 ClassLoader cl = SimpleSocketFactory.class.getClassLoader();
63 URL url = cl.getResource("org/apache/commons/httpclient/ssl/simpleserver.keystore");
64 KeyStore keystore = KeyStore.getInstance("jks");
65 InputStream is = null;
66 try {
67 is = url.openStream();
68 keystore.load(is, "nopassword".toCharArray());
69 } finally {
70 if (is != null) is.close();
71 }
72 KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(
73 KeyManagerFactory.getDefaultAlgorithm());
74 kmfactory.init(keystore, "nopassword".toCharArray());
75 KeyManager[] keymanagers = kmfactory.getKeyManagers();
76 SSLContext sslcontext = SSLContext.getInstance("TLS");
77 sslcontext.init(keymanagers, null, null);
78 return sslcontext;
79 } catch (Exception ex) {
80
81
82 LOG.error(ex.getMessage(), ex);
83 throw new IllegalStateException(ex.getMessage());
84 }
85
86 }
87
88 private static SSLContext getSSLContext() {
89 if (SSLCONTEXT == null) {
90 SSLCONTEXT = createSSLContext();
91 }
92 return SSLCONTEXT;
93 }
94
95 public SimpleSSLSocketFactory() {
96 super();
97 }
98
99 public ServerSocket createServerSocket(int port) throws IOException {
100 ServerSocketFactory socketfactory = getSSLContext().getServerSocketFactory();
101 return socketfactory.createServerSocket(port);
102 }
103
104 }