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 package org.apache.hc.client5.http.ssl;
29
30 import javax.net.ssl.HostnameVerifier;
31 import javax.net.ssl.SSLContext;
32 import javax.net.ssl.SSLEngine;
33
34 import org.apache.hc.core5.function.Factory;
35 import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
36 import org.apache.hc.core5.http.ssl.TLS;
37 import org.apache.hc.core5.reactor.ssl.SSLBufferMode;
38 import org.apache.hc.core5.reactor.ssl.TlsDetails;
39 import org.apache.hc.core5.ssl.SSLContexts;
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 public class ClientTlsStrategyBuilder {
68
69 public static ClientTlsStrategyBuilder create() {
70 return new ClientTlsStrategyBuilder();
71 }
72
73 private SSLContext sslContext;
74 private String[] tlsVersions;
75 private String[] ciphers;
76 private SSLBufferMode sslBufferMode;
77 private HostnameVerificationPolicy hostnameVerificationPolicy;
78 private HostnameVerifier hostnameVerifier;
79 private boolean systemProperties;
80
81
82
83
84
85
86 public ClientTlsStrategyBuilder setSslContext(final SSLContext sslContext) {
87 this.sslContext = sslContext;
88 return this;
89 }
90
91
92
93
94
95
96 public final ClientTlsStrategyBuilder setTlsVersions(final String... tlslVersions) {
97 this.tlsVersions = tlslVersions;
98 return this;
99 }
100
101
102
103
104
105
106 public final ClientTlsStrategyBuilder setTlsVersions(final TLS... tlslVersions) {
107 this.tlsVersions = new String[tlslVersions.length];
108 for (int i = 0; i < tlslVersions.length; i++) {
109 this.tlsVersions[i] = tlslVersions[i].id;
110 }
111 return this;
112 }
113
114
115
116
117
118
119 public final ClientTlsStrategyBuilder setCiphers(final String... ciphers) {
120 this.ciphers = ciphers;
121 return this;
122 }
123
124
125
126
127
128
129 public ClientTlsStrategyBuilder setSslBufferMode(final SSLBufferMode sslBufferMode) {
130 this.sslBufferMode = sslBufferMode;
131 return this;
132 }
133
134
135
136
137
138
139 @Deprecated
140 public void setHostnameVerificationPolicy(final HostnameVerificationPolicy hostnameVerificationPolicy) {
141 this.hostnameVerificationPolicy = hostnameVerificationPolicy;
142 }
143
144
145
146
147
148
149 public ClientTlsStrategyBuilder setHostVerificationPolicy(final HostnameVerificationPolicy hostnameVerificationPolicy) {
150 this.hostnameVerificationPolicy = hostnameVerificationPolicy;
151 return this;
152 }
153
154
155
156
157
158
159 public ClientTlsStrategyBuilder setHostnameVerifier(final HostnameVerifier hostnameVerifier) {
160 this.hostnameVerifier = hostnameVerifier;
161 return this;
162 }
163
164
165
166
167
168
169
170 @Deprecated
171 public ClientTlsStrategyBuilder setTlsDetailsFactory(final Factory<SSLEngine, TlsDetails> tlsDetailsFactory) {
172 return this;
173 }
174
175
176
177
178
179
180
181 public final ClientTlsStrategyBuilder useSystemProperties() {
182 this.systemProperties = true;
183 return this;
184 }
185
186
187
188
189 @Deprecated
190 public TlsStrategy build() {
191 return buildImpl();
192 }
193
194
195
196
197 public TlsStrategy buildAsync() {
198 return buildImpl();
199 }
200
201
202
203
204 public TlsSocketStrategy buildClassic() {
205 return buildImpl();
206 }
207
208 private DefaultClientTlsStrategy buildImpl() {
209 final SSLContext sslContextCopy;
210 if (sslContext != null) {
211 sslContextCopy = sslContext;
212 } else {
213 sslContextCopy = systemProperties ? SSLContexts.createSystemDefault() : SSLContexts.createDefault();
214 }
215 final String[] tlsVersionsCopy;
216 if (tlsVersions != null) {
217 tlsVersionsCopy = tlsVersions;
218 } else {
219 tlsVersionsCopy = systemProperties ? HttpsSupport.getSystemProtocols() : null;
220 }
221 final String[] ciphersCopy;
222 if (ciphers != null) {
223 ciphersCopy = ciphers;
224 } else {
225 ciphersCopy = systemProperties ? HttpsSupport.getSystemCipherSuits() : null;
226 }
227 final HostnameVerificationPolicy hostnameVerificationPolicyCopy = hostnameVerificationPolicy != null ? hostnameVerificationPolicy :
228 (hostnameVerifier == null ? HostnameVerificationPolicy.BUILTIN : HostnameVerificationPolicy.BOTH);
229 final HostnameVerifier hostnameVerifierCopy = hostnameVerifier != null ? hostnameVerifier :
230 (hostnameVerificationPolicyCopy == HostnameVerificationPolicy.CLIENT || hostnameVerificationPolicyCopy == HostnameVerificationPolicy.BOTH ?
231 HttpsSupport.getDefaultHostnameVerifier() : NoopHostnameVerifier.INSTANCE);
232 return new DefaultClientTlsStrategy(
233 sslContextCopy,
234 tlsVersionsCopy,
235 ciphersCopy,
236 sslBufferMode != null ? sslBufferMode : SSLBufferMode.STATIC,
237 hostnameVerificationPolicyCopy,
238 hostnameVerifierCopy);
239 }
240
241 }