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 public ClientTlsStrategyBuilder setSslContext(final SSLContext sslContext) {
85 this.sslContext = sslContext;
86 return this;
87 }
88
89
90
91
92 public final ClientTlsStrategyBuilder setTlsVersions(final String... tlslVersions) {
93 this.tlsVersions = tlslVersions;
94 return this;
95 }
96
97
98
99
100 public final ClientTlsStrategyBuilder setTlsVersions(final TLS... tlslVersions) {
101 this.tlsVersions = new String[tlslVersions.length];
102 for (int i = 0; i < tlslVersions.length; i++) {
103 this.tlsVersions[i] = tlslVersions[i].id;
104 }
105 return this;
106 }
107
108
109
110
111 public final ClientTlsStrategyBuilder setCiphers(final String... ciphers) {
112 this.ciphers = ciphers;
113 return this;
114 }
115
116
117
118
119 public ClientTlsStrategyBuilder setSslBufferMode(final SSLBufferMode sslBufferMode) {
120 this.sslBufferMode = sslBufferMode;
121 return this;
122 }
123
124
125
126
127 public void setHostnameVerificationPolicy(final HostnameVerificationPolicy hostnameVerificationPolicy) {
128 this.hostnameVerificationPolicy = hostnameVerificationPolicy;
129 }
130
131
132
133
134 public ClientTlsStrategyBuilder setHostnameVerifier(final HostnameVerifier hostnameVerifier) {
135 this.hostnameVerifier = hostnameVerifier;
136 return this;
137 }
138
139
140
141
142
143
144 @Deprecated
145 public ClientTlsStrategyBuilder setTlsDetailsFactory(final Factory<SSLEngine, TlsDetails> tlsDetailsFactory) {
146 return this;
147 }
148
149
150
151
152
153 public final ClientTlsStrategyBuilder useSystemProperties() {
154 this.systemProperties = true;
155 return this;
156 }
157
158 public TlsStrategy build() {
159 final SSLContext sslContextCopy;
160 if (sslContext != null) {
161 sslContextCopy = sslContext;
162 } else {
163 sslContextCopy = systemProperties ? SSLContexts.createSystemDefault() : SSLContexts.createDefault();
164 }
165 final String[] tlsVersionsCopy;
166 if (tlsVersions != null) {
167 tlsVersionsCopy = tlsVersions;
168 } else {
169 tlsVersionsCopy = systemProperties ? HttpsSupport.getSystemProtocols() : null;
170 }
171 final String[] ciphersCopy;
172 if (ciphers != null) {
173 ciphersCopy = ciphers;
174 } else {
175 ciphersCopy = systemProperties ? HttpsSupport.getSystemCipherSuits() : null;
176 }
177 final HostnameVerificationPolicy hostnameVerificationPolicyCopy = hostnameVerificationPolicy != null ? hostnameVerificationPolicy :
178 (hostnameVerifier == null ? HostnameVerificationPolicy.BUILTIN : HostnameVerificationPolicy.BOTH);
179 final HostnameVerifier hostnameVerifierCopy = hostnameVerifier != null ? hostnameVerifier :
180 (hostnameVerificationPolicyCopy == HostnameVerificationPolicy.CLIENT || hostnameVerificationPolicyCopy == HostnameVerificationPolicy.BOTH ?
181 HttpsSupport.getDefaultHostnameVerifier() : NoopHostnameVerifier.INSTANCE);
182 return new DefaultClientTlsStrategy(
183 sslContextCopy,
184 tlsVersionsCopy,
185 ciphersCopy,
186 sslBufferMode != null ? sslBufferMode : SSLBufferMode.STATIC,
187 hostnameVerificationPolicyCopy,
188 hostnameVerifierCopy);
189 }
190
191 }