-
Notifications
You must be signed in to change notification settings - Fork 43
/
SSLStarter.java
92 lines (74 loc) · 2.68 KB
/
SSLStarter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package jrds.starter;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.log4j.Level;
import jrds.PropertiesManager;
public class SSLStarter extends Starter {
// Create a trust manager that does not validate certificate chains
public static final X509TrustManager trustAllCerts= new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
};
private final static String SSLProtocol = "SSL";
private String[] supportedProtocols = null;
private String[] supportedCipherSuites = null;
private TrustManager[] trustManagers = new TrustManager[]{trustAllCerts};
SSLContext sc = null;
/* (non-Javadoc)
* @see jrds.starter.Starter#configure(jrds.PropertiesManager)
*/
@Override
public void configure(PropertiesManager pm) {
super.configure(pm);
}
@Override
public boolean start() {
try {
sc = SSLContext.getInstance(SSLProtocol);
if(! "Default".equals(sc.getProtocol())) {
sc.init(null, trustManagers, null);
}
} catch (NoSuchAlgorithmException e) {
log(Level.ERROR, e, "failed to init ssl: %s", e);
return false;
} catch (KeyManagementException e) {
log(Level.ERROR, e, "failed to init ssl: %s", e);
return false;
}
return sc != null;
}
public SSLContext getContext() {
return sc;
}
public String[] getSupportedProtocols() {
return supportedProtocols;
}
public String[] getSupportedCipherSuites() {
return supportedCipherSuites;
}
public Socket connect(String host, int port) throws NoSuchAlgorithmException, KeyManagementException, UnknownHostException, IOException {
SocketFactory ss = getLevel().find(SocketFactory.class);
Socket s = ss.createSocket(host, port);
SSLSocketFactory ssf = getContext().getSocketFactory();
s = ssf.createSocket(s, host, port, true);
log(Level.DEBUG, "done SSL handshake for %s", host);
return s;
}
@Override
public boolean isStarted() {
return sc != null;
}
}