35 import javax.net.ssl.SSLParameters; |
35 import javax.net.ssl.SSLParameters; |
36 |
36 |
37 import jdk.internal.net.http.common.SSLTube; |
37 import jdk.internal.net.http.common.SSLTube; |
38 import jdk.internal.net.http.common.Log; |
38 import jdk.internal.net.http.common.Log; |
39 import jdk.internal.net.http.common.Utils; |
39 import jdk.internal.net.http.common.Utils; |
|
40 import static jdk.internal.net.http.common.Utils.ServerName; |
40 |
41 |
41 |
42 |
42 /** |
43 /** |
43 * Asynchronous version of SSLConnection. |
44 * Asynchronous version of SSLConnection. |
44 * |
45 * |
67 private static final boolean disableHostnameVerification = Utils.isHostnameVerificationDisabled(); |
68 private static final boolean disableHostnameVerification = Utils.isHostnameVerificationDisabled(); |
68 |
69 |
69 |
70 |
70 AbstractAsyncSSLConnection(InetSocketAddress addr, |
71 AbstractAsyncSSLConnection(InetSocketAddress addr, |
71 HttpClientImpl client, |
72 HttpClientImpl client, |
72 String serverName, int port, |
73 ServerName serverName, int port, |
73 String[] alpn) { |
74 String[] alpn) { |
74 super(addr, client); |
75 super(addr, client); |
75 this.serverName = serverName; |
76 this.serverName = serverName.getName(); |
76 SSLContext context = client.theSSLContext(); |
77 SSLContext context = client.theSSLContext(); |
77 sslParameters = createSSLParameters(client, serverName, alpn); |
78 sslParameters = createSSLParameters(client, serverName, alpn); |
78 Log.logParams(sslParameters); |
79 Log.logParams(sslParameters); |
79 engine = createEngine(context, serverName, port, sslParameters); |
80 engine = createEngine(context, serverName.getName(), port, sslParameters); |
80 } |
81 } |
81 |
82 |
82 abstract HttpConnection plainConnection(); |
83 abstract HttpConnection plainConnection(); |
83 abstract SSLTube getConnectionFlow(); |
84 abstract SSLTube getConnectionFlow(); |
84 |
85 |
88 } |
89 } |
89 |
90 |
90 final SSLEngine getEngine() { return engine; } |
91 final SSLEngine getEngine() { return engine; } |
91 |
92 |
92 private static SSLParameters createSSLParameters(HttpClientImpl client, |
93 private static SSLParameters createSSLParameters(HttpClientImpl client, |
93 String serverName, |
94 ServerName serverName, |
94 String[] alpn) { |
95 String[] alpn) { |
95 SSLParameters sslp = client.sslParameters(); |
96 SSLParameters sslp = client.sslParameters(); |
96 SSLParameters sslParameters = Utils.copySSLParameters(sslp); |
97 SSLParameters sslParameters = Utils.copySSLParameters(sslp); |
97 if (!disableHostnameVerification) |
98 if (!disableHostnameVerification) |
98 sslParameters.setEndpointIdentificationAlgorithm("HTTPS"); |
99 sslParameters.setEndpointIdentificationAlgorithm("HTTPS"); |
101 Arrays.toString(alpn)); |
102 Arrays.toString(alpn)); |
102 sslParameters.setApplicationProtocols(alpn); |
103 sslParameters.setApplicationProtocols(alpn); |
103 } else { |
104 } else { |
104 Log.logSSL("AbstractAsyncSSLConnection: no applications set!"); |
105 Log.logSSL("AbstractAsyncSSLConnection: no applications set!"); |
105 } |
106 } |
106 if (serverName != null) { |
107 if (!serverName.isLiteral()) { |
107 sslParameters.setServerNames(List.of(new SNIHostName(serverName))); |
108 String name = serverName.getName(); |
|
109 if (name != null && name.length() > 0) { |
|
110 sslParameters.setServerNames(List.of(new SNIHostName(name))); |
|
111 } |
108 } |
112 } |
109 return sslParameters; |
113 return sslParameters; |
110 } |
114 } |
111 |
115 |
112 private static SSLEngine createEngine(SSLContext context, String serverName, int port, |
116 private static SSLEngine createEngine(SSLContext context, String serverName, int port, |