Samples JDK
EchoServerTest.java
1 package com.freemindcafe.socket.ssl.sample5;
2 
3 import static com.freemindcafe.utils.FileSystemUtils.currentDir;
4 import java.io.BufferedReader;
5 import java.io.FileInputStream;
6 import java.io.InputStream;
7 import java.io.InputStreamReader;
8 import java.net.Socket;
9 import java.security.KeyStore;
10 import java.security.Principal;
11 import java.security.PrivateKey;
12 import java.security.cert.X509Certificate;
13 
14 import javax.net.ssl.KeyManager;
15 import javax.net.ssl.KeyManagerFactory;
16 import javax.net.ssl.SSLContext;
17 import javax.net.ssl.SSLServerSocket;
18 import javax.net.ssl.SSLServerSocketFactory;
19 import javax.net.ssl.SSLSocket;
20 import javax.net.ssl.TrustManagerFactory;
21 import javax.net.ssl.X509KeyManager;
22 
23 import org.junit.Test;
24 
25 public class EchoServerTest {
26 
27  @Test
28  public void ssl_server_that_demands_client_auth_uses_custom_key_manager() throws Exception{
29 
30  System.setProperty(
31  "javax.net.ssl.trustStore",currentDir()+"/src/com/freemindcafe/socket/ssl/sample5/serverkeystore.jks");
32  System.setProperty("javax.net.ssl.trustStorePassword", "password");
33 // System.setProperty(
34 // "javax.net.ssl.keyStore",
35 // currentDir()+"/src/com/freemindcafe/socket/ssl/sample5/serverkeystore.jks");
36 // System.setProperty("javax.net.ssl.keyStorePassword", "password");
37 
38  System.setProperty("javax.net.debug", "ssl:handshake");
39 
40  KeyStore ks = KeyStore.getInstance("JKS");
41 // KeyStore ts = KeyStore.getInstance("JKS");
42 //
43  char[] passphrase = "password".toCharArray();
44 //
45  ks.load(new FileInputStream(currentDir()+"/src/com/freemindcafe/socket/ssl/sample5/serverkeystore.jks"), passphrase);
46 // ts.load(new FileInputStream(currentDir()+"/src/com/freemindcafe/socket/ssl/sample5/serverkeystore.jks"), passphrase);
47 //
48  KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
49  kmf.init(ks, passphrase);
50 //
51 // TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
52 // tmf.init(ts);
53 
54  final X509KeyManager origKm = (X509KeyManager)kmf.getKeyManagers()[0];
55  X509KeyManager km = new X509KeyManager() {
56 
57  @Override
58  public String chooseClientAlias(String[] keyType,
59  Principal[] issuers, Socket socket) {
60  return origKm.chooseClientAlias(keyType, issuers, socket);
61  }
62 
63  @Override
64  public String chooseServerAlias(String keyType,
65  Principal[] issuers, Socket socket) {
66  //InetAddress remoteAddress = socket.getInetAddress();
67  return "serverkey";
68  }
69 
70  @Override
71  public X509Certificate[] getCertificateChain(String alias) {
72  return origKm.getCertificateChain(alias);
73  }
74 
75  @Override
76  public String[] getClientAliases(String keyType, Principal[] issuers) {
77  return origKm.getClientAliases(keyType, issuers);
78  }
79 
80  @Override
81  public PrivateKey getPrivateKey(String alias) {
82  return origKm.getPrivateKey(alias);
83  }
84 
85  @Override
86  public String[] getServerAliases(String keyType, Principal[] issuers) {
87  return origKm.getServerAliases(keyType, issuers);
88  }
89 
90  };
91 
92  SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
93  //sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
94  sslContext.init(new KeyManager[] { km }, null, null);
95 
96 // SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory
97 // .getDefault();
98  SSLServerSocketFactory sslserversocketfactory = sslContext.getServerSocketFactory();
99  SSLServerSocket sslserversocket = (SSLServerSocket) sslserversocketfactory
100  .createServerSocket(9999);
101  sslserversocket.setNeedClientAuth(true);
102  SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();
103 
104  InputStream inputstream = sslsocket.getInputStream();
105  InputStreamReader inputstreamreader = new InputStreamReader(
106  inputstream);
107  BufferedReader bufferedreader = new BufferedReader(
108  inputstreamreader);
109 
110  String string = null;
111  while ((string = bufferedreader.readLine()) != null) {
112  System.out.println("server printing ################");
113  System.out.println(string);
114  System.out.flush();
115  }
116 
117 
118  }
119 
120 }