|
37 | 37 |
|
38 | 38 | @Slf4j |
39 | 39 | public class ZitiTlsSocketStrategy extends DefaultClientTlsStrategy { |
40 | | - private final SSLSocketFactory zitiSslSocketFactory; |
| 40 | + private SSLSocketFactory zitiSslSocketFactory; |
| 41 | + |
| 42 | + private final SSLContext sslContext; |
41 | 43 | private final HostnameVerificationPolicy hostnameVerificationPolicy; |
42 | 44 |
|
43 | 45 | public ZitiTlsSocketStrategy(final SSLContext sslContext, |
44 | 46 | final HostnameVerificationPolicy hostnameVerificationPolicy, |
45 | 47 | final HostnameVerifier hostnameVerifier) { |
46 | 48 | super(sslContext, hostnameVerificationPolicy, hostnameVerifier); |
47 | | - this.zitiSslSocketFactory = Ziti.getSSLSocketFactory(sslContext); |
| 49 | + this.sslContext = sslContext; |
48 | 50 | this.hostnameVerificationPolicy = hostnameVerificationPolicy; |
49 | 51 | } |
50 | 52 |
|
51 | 53 | public ZitiTlsSocketStrategy(final SSLContext sslContext) { |
52 | 54 | super(sslContext); |
53 | | - this.zitiSslSocketFactory = Ziti.getSSLSocketFactory(sslContext); |
| 55 | + this.sslContext = sslContext; |
54 | 56 | this.hostnameVerificationPolicy = HostnameVerificationPolicy.BOTH; |
55 | 57 | } |
56 | 58 |
|
57 | 59 | @Override |
58 | 60 | public SSLSocket upgrade(Socket socket, String target, int port, Object attachment, HttpContext context) throws IOException { |
59 | | - final SSLSocket upgradedSocket = (SSLSocket) zitiSslSocketFactory.createSocket(socket, target, port, true); |
| 61 | + final SSLSocket upgradedSocket = (SSLSocket) getZitiSslSocketFactory().createSocket(socket, target, port, true); |
60 | 62 | try { |
61 | 63 | executeHandshake(upgradedSocket, target, attachment); |
62 | 64 | return upgradedSocket; |
@@ -97,4 +99,15 @@ private void executeHandshake( |
97 | 99 | verifySession(target, upgradedSocket.getSession()); |
98 | 100 | } |
99 | 101 |
|
| 102 | + protected SSLSocketFactory getZitiSslSocketFactory() { |
| 103 | + if (zitiSslSocketFactory == null) { |
| 104 | + synchronized(this) { |
| 105 | + if (zitiSslSocketFactory == null) { |
| 106 | + zitiSslSocketFactory = Ziti.getSSLSocketFactory(sslContext); |
| 107 | + } |
| 108 | + } |
| 109 | + } |
| 110 | + return zitiSslSocketFactory; |
| 111 | + } |
| 112 | + |
100 | 113 | } |
0 commit comments