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.core5.http2.ssl;
29
30 import java.net.SocketAddress;
31
32 import javax.net.ssl.SSLContext;
33
34 import org.apache.hc.core5.concurrent.FutureCallback;
35 import org.apache.hc.core5.http.HttpHost;
36 import org.apache.hc.core5.http.URIScheme;
37 import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
38 import org.apache.hc.core5.net.NamedEndpoint;
39 import org.apache.hc.core5.reactor.ssl.SSLBufferMode;
40 import org.apache.hc.core5.reactor.ssl.SSLSessionInitializer;
41 import org.apache.hc.core5.reactor.ssl.SSLSessionVerifier;
42 import org.apache.hc.core5.reactor.ssl.TransportSecurityLayer;
43 import org.apache.hc.core5.ssl.SSLContexts;
44 import org.apache.hc.core5.util.Args;
45 import org.apache.hc.core5.util.Timeout;
46
47
48
49
50
51
52
53 public class H2ClientTlsStrategy implements TlsStrategy {
54
55 private final SSLContext sslContext;
56 private final SSLBufferMode sslBufferMode;
57 private final SSLSessionInitializer initializer;
58 private final SSLSessionVerifier verifier;
59
60 public H2ClientTlsStrategy(
61 final SSLContext sslContext,
62 final SSLBufferMode sslBufferMode,
63 final SSLSessionInitializer initializer,
64 final SSLSessionVerifier verifier) {
65 this.sslContext = Args.notNull(sslContext, "SSL context");
66 this.sslBufferMode = sslBufferMode;
67 this.initializer = initializer;
68 this.verifier = verifier;
69 }
70
71 public H2ClientTlsStrategy(
72 final SSLContext sslContext,
73 final SSLSessionInitializer initializer,
74 final SSLSessionVerifier verifier) {
75 this(sslContext, null, initializer, verifier);
76 }
77
78 public H2ClientTlsStrategy(
79 final SSLContext sslContext,
80 final SSLSessionVerifier verifier) {
81 this(sslContext, null, null, verifier);
82 }
83
84 public H2ClientTlsStrategy(final SSLContext sslContext) {
85 this(sslContext, null, null, null);
86 }
87
88 public H2ClientTlsStrategy() {
89 this(SSLContexts.createSystemDefault());
90 }
91
92
93
94
95
96
97
98 public H2ClientTlsStrategy( final SSLSessionVerifier verifier) {
99 this(SSLContexts.createSystemDefault(), null, null, verifier);
100 }
101
102 @Override
103 public void upgrade(
104 final TransportSecurityLayer tlsSession,
105 final NamedEndpoint endpoint,
106 final Object attachment,
107 final Timeout handshakeTimeout,
108 final FutureCallback<TransportSecurityLayer> callback) {
109 tlsSession.startTls(
110 sslContext,
111 endpoint,
112 sslBufferMode,
113 H2TlsSupport.enforceRequirements(attachment, initializer),
114 verifier,
115 handshakeTimeout,
116 callback);
117 }
118
119
120
121
122 @Deprecated
123 @Override
124 public boolean upgrade(
125 final TransportSecurityLayer tlsSession,
126 final HttpHost host,
127 final SocketAddress localAddress,
128 final SocketAddress remoteAddress,
129 final Object attachment,
130 final Timeout handshakeTimeout) {
131 final String scheme = host != null ? host.getSchemeName() : null;
132 if (URIScheme.HTTPS.same(scheme)) {
133 upgrade(tlsSession, host, attachment, handshakeTimeout, null);
134 return true;
135 }
136 return false;
137 }
138
139 }