src/java.net.http/share/classes/jdk/internal/net/http/AbstractAsyncSSLConnection.java
branchhttp-client-branch
changeset 56368 c10279a27b41
parent 56335 7e56c39fa1fa
child 56437 f8b3f053cfbb
equal deleted inserted replaced
56367:875d85699981 56368:c10279a27b41
    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,