1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.example.echoserver.ssl;
21
22 import java.io.IOException;
23 import java.io.InputStream;
24 import java.security.GeneralSecurityException;
25 import java.security.KeyStore;
26 import java.security.Security;
27
28 import javax.net.ssl.KeyManagerFactory;
29 import javax.net.ssl.SSLContext;
30
31
32
33
34
35
36
37 public class BogusSslContextFactory {
38
39
40
41
42 private static final String PROTOCOL = "TLS";
43
44 private static final String KEY_MANAGER_FACTORY_ALGORITHM;
45
46 static {
47 String algorithm = Security
48 .getProperty("ssl.KeyManagerFactory.algorithm");
49 if (algorithm == null) {
50 algorithm = "SunX509";
51 }
52
53 KEY_MANAGER_FACTORY_ALGORITHM = algorithm;
54 }
55
56
57
58
59 private static final String BOGUS_KEYSTORE = "bogus.cert";
60
61
62
63
64
65
66
67
68
69
70 private static final char[] BOGUS_PW = { 'b', 'o', 'g', 'u', 's', 'p', 'w' };
71
72 private static SSLContext serverInstance = null;
73
74 private static SSLContext clientInstance = null;
75
76
77
78
79
80
81
82
83 public static SSLContext getInstance(boolean server)
84 throws GeneralSecurityException {
85 SSLContext retInstance = null;
86 if (server) {
87 synchronized(BogusSslContextFactory.class) {
88 if (serverInstance == null) {
89 try {
90 serverInstance = createBougusServerSslContext();
91 } catch (Exception ioe) {
92 throw new GeneralSecurityException(
93 "Can't create Server SSLContext:" + ioe);
94 }
95 }
96 }
97 retInstance = serverInstance;
98 } else {
99 synchronized (BogusSslContextFactory.class) {
100 if (clientInstance == null) {
101 clientInstance = createBougusClientSslContext();
102 }
103 }
104 retInstance = clientInstance;
105 }
106 return retInstance;
107 }
108
109 private static SSLContext createBougusServerSslContext()
110 throws GeneralSecurityException, IOException {
111
112 KeyStore ks = KeyStore.getInstance("JKS");
113 InputStream in = null;
114 try {
115 in = BogusSslContextFactory.class
116 .getResourceAsStream(BOGUS_KEYSTORE);
117 ks.load(in, BOGUS_PW);
118 } finally {
119 if (in != null) {
120 try {
121 in.close();
122 } catch (IOException ignored) {
123 }
124 }
125 }
126
127
128 KeyManagerFactory kmf = KeyManagerFactory
129 .getInstance(KEY_MANAGER_FACTORY_ALGORITHM);
130 kmf.init(ks, BOGUS_PW);
131
132
133 SSLContext sslContext = SSLContext.getInstance(PROTOCOL);
134 sslContext.init(kmf.getKeyManagers(),
135 BogusTrustManagerFactory.X509_MANAGERS, null);
136
137 return sslContext;
138 }
139
140 private static SSLContext createBougusClientSslContext()
141 throws GeneralSecurityException {
142 SSLContext context = SSLContext.getInstance(PROTOCOL);
143 context.init(null, BogusTrustManagerFactory.X509_MANAGERS, null);
144 return context;
145 }
146
147 }