1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jboss.netty.example.http.websocketx.sslserver;
17
18 import java.io.FileInputStream;
19 import java.security.KeyStore;
20 import java.security.Security;
21
22 import javax.net.ssl.KeyManagerFactory;
23 import javax.net.ssl.SSLContext;
24
25 import org.jboss.netty.logging.InternalLogger;
26 import org.jboss.netty.logging.InternalLoggerFactory;
27
28
29
30
31 public final class WebSocketSslServerSslContext {
32
33 private static final InternalLogger logger = InternalLoggerFactory.getInstance(WebSocketSslServerSslContext.class);
34 private static final String PROTOCOL = "TLS";
35 private SSLContext _serverContext;
36
37
38
39
40 public static WebSocketSslServerSslContext getInstance() {
41 return SingletonHolder.INSTANCE;
42 }
43
44
45
46
47
48
49
50 private static class SingletonHolder {
51
52 public static final WebSocketSslServerSslContext INSTANCE = new WebSocketSslServerSslContext();
53 }
54
55
56
57
58 private WebSocketSslServerSslContext() {
59 try {
60
61 String algorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm");
62 if (algorithm == null) {
63 algorithm = "SunX509";
64 }
65
66 SSLContext serverContext = null;
67 try {
68 String keyStoreFilePath = System.getProperty("keystore.file.path");
69 String keyStoreFilePassword = System.getProperty("keystore.file.password");
70
71 KeyStore ks = KeyStore.getInstance("JKS");
72 FileInputStream fin = new FileInputStream(keyStoreFilePath);
73 ks.load(fin, keyStoreFilePassword.toCharArray());
74
75
76
77
78 KeyManagerFactory kmf = KeyManagerFactory.getInstance(algorithm);
79 kmf.init(ks, keyStoreFilePassword.toCharArray());
80
81
82 serverContext = SSLContext.getInstance(PROTOCOL);
83 serverContext.init(kmf.getKeyManagers(), null, null);
84 } catch (Exception e) {
85 throw new Error("Failed to initialize the server-side SSLContext", e);
86 }
87 _serverContext = serverContext;
88 } catch (Exception ex) {
89 if (logger.isErrorEnabled()) {
90 logger.error("Error initializing SslContextManager. " + ex.getMessage(), ex);
91 }
92 System.exit(1);
93
94 }
95 }
96
97
98
99
100 public SSLContext getServerContext() {
101 return _serverContext;
102 }
103 }