1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jboss.netty.example.securechat;
17
18 import org.jboss.netty.handler.ssl.SslHandler;
19
20 import javax.net.ssl.KeyManager;
21 import javax.net.ssl.KeyManagerFactory;
22 import javax.net.ssl.SSLContext;
23 import javax.net.ssl.SSLEngine;
24 import javax.net.ssl.TrustManager;
25 import java.security.KeyStore;
26 import java.security.SecureRandom;
27 import java.security.Security;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 public final class SecureChatSslContextFactory {
53
54 private static final String PROTOCOL = "TLS";
55 private static final SSLContext SERVER_CONTEXT;
56 private static final SSLContext CLIENT_CONTEXT;
57
58 static {
59 String algorithm = Security.getProperty("ssl.KeyManagerFactory.algorithm");
60 if (algorithm == null) {
61 algorithm = "SunX509";
62 }
63
64 SSLContext serverContext;
65 SSLContext clientContext;
66 try {
67 KeyStore ks = KeyStore.getInstance("JKS");
68 ks.load(SecureChatKeyStore.asInputStream(),
69 SecureChatKeyStore.getKeyStorePassword());
70
71
72 KeyManagerFactory kmf = KeyManagerFactory.getInstance(algorithm);
73 kmf.init(ks, SecureChatKeyStore.getCertificatePassword());
74
75
76 serverContext = SSLContext.getInstance(PROTOCOL);
77 serverContext.init(kmf.getKeyManagers(), null, null);
78 } catch (Exception e) {
79 throw new Error(
80 "Failed to initialize the server-side SSLContext", e);
81 }
82
83 try {
84 clientContext = SSLContext.getInstance(PROTOCOL);
85 clientContext.init(null, SecureChatTrustManagerFactory.getTrustManagers(), null);
86 } catch (Exception e) {
87 throw new Error(
88 "Failed to initialize the client-side SSLContext", e);
89 }
90
91 SERVER_CONTEXT = serverContext;
92 CLIENT_CONTEXT = clientContext;
93 }
94
95 public static SSLContext getServerContext() {
96 return SERVER_CONTEXT;
97 }
98
99 public static SSLContext getClientContext() {
100 return CLIENT_CONTEXT;
101 }
102
103 private SecureChatSslContextFactory() {
104
105 }
106 }