You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/04/29 15:48:01 UTC

svn commit: r1676745 - in /tomcat/trunk/java/org/apache/tomcat/util/net: AbstractEndpoint.java AbstractJsseEndpoint.java SSLHostConfig.java

Author: markt
Date: Wed Apr 29 13:47:20 2015
New Revision: 1676745

URL: http://svn.apache.org/r1676745
Log:
Add an SSLContext object to SSLHostConfig so the endpoints do not need to maintain a separate map of SNI host name to some SSLContext object

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/AbstractJsseEndpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1676745&r1=1676744&r2=1676745&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Wed Apr 29 13:47:20 2015
@@ -43,8 +43,8 @@ import org.apache.tomcat.util.threads.Re
 import org.apache.tomcat.util.threads.TaskQueue;
 import org.apache.tomcat.util.threads.TaskThreadFactory;
 import org.apache.tomcat.util.threads.ThreadPoolExecutor;
+
 /**
- *
  * @author Mladen Turk
  * @author Remy Maucherat
  */
@@ -231,6 +231,34 @@ public abstract class AbstractEndpoint<S
     }
     protected abstract SSLHostConfig.Type getSslConfigType();
 
+    protected SSLHostConfig getSSLHostConfig(String sniHostName) {
+        SSLHostConfig result = null;
+
+        if (sniHostName != null) {
+            // First choice - direct match
+            result = sslHostConfigs.get(sniHostName);
+            if (result != null) {
+                return result;
+            }
+            // Second choice, wildcard match
+            int indexOfDot = sniHostName.indexOf('.');
+            if (indexOfDot > -1) {
+                result = sslHostConfigs.get("*" + sniHostName.substring(indexOfDot));
+            }
+        }
+
+        // Fall-back. Use the default
+        if (result == null) {
+            result = sslHostConfigs.get(SSLHostConfig.DEFAULT_SSL_HOST_NAME);
+        }
+        if (result == null) {
+            // Should never happen.
+            throw new IllegalStateException();
+        }
+        return result;
+    }
+
+
     /**
      * Has the user requested that send file be used where possible?
      */

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractJsseEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractJsseEndpoint.java?rev=1676745&r1=1676744&r2=1676745&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractJsseEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractJsseEndpoint.java Wed Apr 29 13:47:20 2015
@@ -16,9 +16,7 @@
  */
 package org.apache.tomcat.util.net;
 
-import java.util.HashMap;
 import java.util.Locale;
-import java.util.Map;
 
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.SSLEngine;
@@ -32,7 +30,6 @@ import org.apache.tomcat.util.net.jsse.N
 public abstract class AbstractJsseEndpoint<S> extends AbstractEndpoint<S> {
 
     private SSLImplementation sslImplementation = null;
-    private Map<String,SSLContextWrapper> sslContexts = new HashMap<>();
 
     public SSLImplementation getSslImplementation() {
         return sslImplementation;
@@ -69,14 +66,19 @@ public abstract class AbstractJsseEndpoi
                     sslUtil.configureSessionContext(sessionContext);
                 }
                 SSLContextWrapper sslContextWrapper = new SSLContextWrapper(sslContext, sslUtil);
-                sslContexts.put(sslHostConfig.getHostName(), sslContextWrapper);
+                sslHostConfig.setSslContext(sslContextWrapper);
             }
         }
     }
 
 
     protected SSLEngine createSSLEngine(String sniHostName) {
-        SSLContextWrapper sslContextWrapper = getSSLContextWrapper(sniHostName);
+        SSLHostConfig sslHostConfig = getSSLHostConfig(sniHostName);
+        SSLContextWrapper sslContextWrapper = (SSLContextWrapper) sslHostConfig.getSslContext();
+        if (sslContextWrapper == null) {
+            // TODO i18n
+            throw new IllegalStateException();
+        }
 
         SSLEngine engine = sslContextWrapper.getSSLContext().createSSLEngine();
         if ("false".equals(getClientAuth())) {
@@ -97,10 +99,11 @@ public abstract class AbstractJsseEndpoi
     }
 
 
-
     @Override
     public void unbind() throws Exception {
-        sslContexts.clear();
+        for (SSLHostConfig sslHostConfig : sslHostConfigs.values()) {
+            sslHostConfig.setSslContext(null);
+        }
     }
 
 
@@ -139,34 +142,6 @@ public abstract class AbstractJsseEndpoi
         }
         return result;
     }
-
-
-    private SSLContextWrapper getSSLContextWrapper(String sniHostName) {
-        SSLContextWrapper result = null;
-
-        if (sniHostName != null) {
-            // First choice - direct match
-            result = sslContexts.get(sniHostName);
-            if (result != null) {
-                return result;
-            }
-            // Second choice, wildcard match
-            int indexOfDot = sniHostName.indexOf('.');
-            if (indexOfDot > -1) {
-                result = sslContexts.get("*" + sniHostName.substring(indexOfDot));
-            }
-        }
-
-        // Fall-back. Use the default
-        if (result == null) {
-            result = sslContexts.get(SSLHostConfig.DEFAULT_SSL_HOST_NAME);
-        }
-        if (result == null) {
-            // Should never happen.
-            throw new IllegalStateException();
-        }
-        return result;
-    }
 
 
     private static class SSLContextWrapper {

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java?rev=1676745&r1=1676744&r2=1676745&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java Wed Apr 29 13:47:20 2015
@@ -37,6 +37,10 @@ public class SSLHostConfig {
 
     private String hostName = DEFAULT_SSL_HOST_NAME;
 
+    private Object sslContext;
+
+    // Configuration properties
+
     // Common
     private Set<String> protocols = new HashSet<>();
     // JSSE
@@ -51,6 +55,16 @@ public class SSLHostConfig {
     }
 
 
+    public Object getSslContext() {
+        return sslContext;
+    }
+
+
+    public void setSslContext(Object sslContext) {
+        this.sslContext = sslContext;
+    }
+
+
     public void setConfigType(Type configType) {
         this.configType = configType;
         configuredProperties.remove(configType);



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org