· 8 years ago · Jan 02, 2018, 08:38 AM
1public static void main(String[] args) throws Exception {
2 String serverKeyStoreFile = "D:\tomcat.keystore";
3 String serverKeyStorePwd = "logiscn";
4 String catServerKeyPwd = "logiscn";
5 String serverTrustKeyStoreFile = "D:\tomcat.keystore";
6 String serverTrustKeyStorePwd = "logiscn";
7 //System.setProperty("javax.net.debug", "ssl,handshake");
8 KeyStore serverKeyStore = KeyStore.getInstance("JKS");
9 serverKeyStore.load(new FileInputStream(serverKeyStoreFile), serverKeyStorePwd.toCharArray());
10 KeyStore serverTrustKeyStore = KeyStore.getInstance("JKS");
11 serverTrustKeyStore.load(new FileInputStream(serverTrustKeyStoreFile), serverTrustKeyStorePwd.toCharArray());
12
13 KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
14 kmf.init(serverKeyStore, catServerKeyPwd.toCharArray());
15
16 TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
17 tmf.init(serverTrustKeyStore);
18 SSLContext sslContext = SSLContext.getInstance("TLSv1");
19 // System.out.println(sslContext.getProvider());
20 sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
21 SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory();
22 SSLServerSocket sslServerSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(SERVER_PORT);
23 // sslServerSocket.setNeedClientAuth(true);
24
25 while (true) {
26 SSLSocket s = (SSLSocket) sslServerSocket.accept();
27 // System.out.println(s);
28 //System.out.println(s.getClass());
29 // s.getSupportedProtocols()
30 CatServer cs = new CatServer(s);
31 //s.addHandshakeCompletedListener(cs);
32 s.startHandshake();
33 // System.out.println(s.getHandshakeSession().getProtocol());
34 new Thread(cs).start();
35 }
36}
37
38void processMessage(byte paramByte, int paramInt) throws IOException {
39 if ((this.state >= paramByte) && (this.state != 16) && (paramByte != 15)) {
40 throw new SSLProtocolException("Handshake message sequence violation, state = " + this.state + ", type = " + paramByte);
41 }
42 switch (paramByte) {
43 case 1:
44 HandshakeMessage.ClientHello localClientHello = new HandshakeMessage.ClientHello(this.input, paramInt);
45 clientHello(localClientHello);
46 break;
47 case 11:
48 if (this.doClientAuth == 0) {
49 fatalSE((byte) 10, "client sent unsolicited cert chain");
50 }
51 clientCertificate(new HandshakeMessage.CertificateMsg(this.input));
52 break;
53 case 16:
54 SecretKey localSecretKey;
55 switch (this.keyExchange) {
56 case K_RSA:
57 case K_RSA_EXPORT:
58 RSAClientKeyExchange localRSAClientKeyExchange = new RSAClientKeyExchange(this.protocolVersion, this.clientRequestedVersion,
59 this.sslContext.getSecureRandom(), this.input, paramInt, this.privateKey);
60
61 localSecretKey = clientKeyExchange(localRSAClientKeyExchange);
62 break;
63 case K_KRB5:
64 case K_KRB5_EXPORT:
65 localSecretKey = clientKeyExchange(new KerberosClientKeyExchange(this.protocolVersion, this.clientRequestedVersion,
66 this.sslContext
67
68 .getSecureRandom(),
69 this.input,
70
71 getAccSE(), this.serviceCreds));
72
73 break;
74 case K_DHE_RSA:
75 case K_DHE_DSS:
76 case K_DH_ANON:
77 localSecretKey = clientKeyExchange(new DHClientKeyExchange(this.input));
78 break;
79 case K_ECDH_RSA:
80 case K_ECDH_ECDSA:
81 case K_ECDHE_RSA:
82 case K_ECDHE_ECDSA:
83 case K_ECDH_ANON:
84 localSecretKey = clientKeyExchange(new ECDHClientKeyExchange(this.input));
85 break;
86 default:
87 throw new SSLProtocolException("Unrecognized key exchange: " + this.keyExchange);
88 }
89 calculateKeys(localSecretKey, this.clientRequestedVersion);
90 break;
91 case 15:
92 clientCertificateVerify(new HandshakeMessage.CertificateVerify(this.input, getLocalSupportedSignAlgs(), this.protocolVersion));
93 break;
94 case 20:
95 if (!receivedChangeCipherSpec()) {
96 fatalSE((byte) 40, "Received Finished message before ChangeCipherSpec");
97 }
98 clientFinished(new HandshakeMessage.Finished(this.protocolVersion, this.input, this.cipherSuite));
99 break;
100 default:
101 throw new SSLProtocolException("Illegal server handshake msg, " + paramByte);
102 }
103 if (this.state < paramByte) {
104 if (paramByte == 15) {
105 this.state = (paramByte + 2);
106 } else {
107 this.state = paramByte;
108 }
109 }
110}