This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit c56c139e69215ce76fa18b67d75353f1edc64617 Author: Mark Thomas <ma...@apache.org> AuthorDate: Thu Jan 28 09:29:01 2021 +0000 Ensure the hostName field of SSLHostConfig is always lower case. This is the first part of the fix to make mapping of SNI values to SSL virtual hosts case insensitive. DNS names are case insensitive and while some browsers appear to always convert provided host names to lower case, I have found no requirement for this in the RFCs. The overall plan is to always store and process host names in lower case. This is because they are used as keys in a ConcurrentMap and keys are compared in a case sensitive manner. Using CaseInsensitiveKeyMap was rejected as a solution as that as it is not thread safe. --- java/org/apache/catalina/manager/ManagerServlet.java | 2 ++ java/org/apache/tomcat/util/net/SSLHostConfig.java | 7 ++++++- webapps/docs/config/http.xml | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/java/org/apache/catalina/manager/ManagerServlet.java b/java/org/apache/catalina/manager/ManagerServlet.java index 392fadc..52002d7 100644 --- a/java/org/apache/catalina/manager/ManagerServlet.java +++ b/java/org/apache/catalina/manager/ManagerServlet.java @@ -580,6 +580,8 @@ public class ManagerServlet extends HttpServlet implements ContainerServlet { } else { SSLHostConfig[] sslHostConfigs = http11Protoocol.findSslHostConfigs(); for (SSLHostConfig sslHostConfig : sslHostConfigs) { + // tlsHostName is as provided by the user so use a case insensitive + // comparison as host names are case insensitive. if (sslHostConfig.getHostName().equalsIgnoreCase(tlsHostName)) { found = true; http11Protoocol.reloadSslHostConfig(tlsHostName); diff --git a/java/org/apache/tomcat/util/net/SSLHostConfig.java b/java/org/apache/tomcat/util/net/SSLHostConfig.java index 734b213..8ab6b63 100644 --- a/java/org/apache/tomcat/util/net/SSLHostConfig.java +++ b/java/org/apache/tomcat/util/net/SSLHostConfig.java @@ -25,6 +25,7 @@ import java.security.UnrecoverableKeyException; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.Locale; import java.util.Set; import javax.management.ObjectName; @@ -409,10 +410,14 @@ public class SSLHostConfig implements Serializable { public void setHostName(String hostName) { - this.hostName = hostName; + this.hostName = hostName.toLowerCase(Locale.ENGLISH); } + /** + * @return The host name associated with this SSL configuration - always in + * lower case. + */ public String getHostName() { return hostName; } diff --git a/webapps/docs/config/http.xml b/webapps/docs/config/http.xml index 32c300b..8d77679 100644 --- a/webapps/docs/config/http.xml +++ b/webapps/docs/config/http.xml @@ -1306,7 +1306,8 @@ <p>The name of the SSL Host. This should either be the fully qualified domain name (e.g. <code>tomcat.apache.org</code>) or a wild card domain name (e.g. <code>*.apache.org</code>). If not specified, the default value - of <code>_default_</code> will be used.</p> + of <code>_default_</code> will be used. Provided values are always + converted to lower case.</p> </attribute> <attribute name="insecureRenegotiation" required="false"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org