Author: markt
Date: Wed Oct 10 11:56:09 2018
New Revision: 1843428

URL: http://svn.apache.org/viewvc?rev=1843428&view=rev
Log:
JSSE only supports TLS client authentication as part of the initial handshake. 
Log a warning if a JSSE connector is configured with TLS 1.3 and optional 
authentication.

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/net/LocalStrings.properties
    tomcat/trunk/java/org/apache/tomcat/util/net/SSLUtilBase.java
    tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSEUtil.java
    tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLUtil.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/LocalStrings.properties?rev=1843428&r1=1843427&r2=1843428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/LocalStrings.properties 
[UTF-8] (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/LocalStrings.properties 
[UTF-8] Wed Oct 10 11:56:09 2018
@@ -129,6 +129,7 @@ channel.nio.ssl.foundHttp=Found an plain
 jsse.invalid_truststore_password=The provided trust store password could not 
be used to unlock and/or validate the trust store. Retrying to access the trust 
store with a null password which will skip validation.
 jsse.keystore_load_failed=Failed to load keystore type [{0}] with path [{1}] 
due to [{2}]
 jsse.ssl3=SSLv3 has been explicitly enabled. This protocol is known to be 
insecure.
+jsse.tls13.auth=The JSSE TLS 1.3 implementation does not support 
authentication after the initial handshake and is therefore incompatible with 
optional client authentication
 
 sniExtractor.clientHelloInvalid=The ClientHello message was not correctly 
formatted
 sniExtractor.clientHelloTooBig=The ClientHello was not presented in a single 
TLS record so no SNI information could be extracted

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SSLUtilBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SSLUtilBase.java?rev=1843428&r1=1843427&r2=1843428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SSLUtilBase.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SSLUtilBase.java Wed Oct 10 
11:56:09 2018
@@ -31,6 +31,7 @@ import java.util.Set;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.file.ConfigFileLoader;
+import org.apache.tomcat.util.net.SSLHostConfig.CertificateVerification;
 import org.apache.tomcat.util.res.StringManager;
 
 /**
@@ -72,6 +73,13 @@ public abstract class SSLUtilBase implem
         }
         this.enabledProtocols = enabledProtocols.toArray(new 
String[enabledProtocols.size()]);
 
+        if (enabledProtocols.contains(Constants.SSL_PROTO_TLSv1_3) &&
+                (sslHostConfig.getCertificateVerification() == 
CertificateVerification.OPTIONAL ||
+                        sslHostConfig.getCertificateVerification() == 
CertificateVerification.OPTIONAL) &&
+                !isTls13RenegAuthAvailable() && warnOnSkip) {
+            log.warn(sm.getString("jsse.tls13.auth"));
+        }
+
         // Calculate the enabled ciphers
         List<String> configuredCiphers = sslHostConfig.getJsseCipherNames();
         Set<String> implementedCiphers = getImplementedCiphers();
@@ -209,4 +217,5 @@ public abstract class SSLUtilBase implem
     protected abstract Set<String> getImplementedCiphers();
     protected abstract Log getLog();
     protected abstract boolean isTls13Available();
+    protected abstract boolean isTls13RenegAuthAvailable();
 }

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSEUtil.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSEUtil.java?rev=1843428&r1=1843427&r2=1843428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSEUtil.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSEUtil.java Wed Oct 10 
11:56:09 2018
@@ -177,6 +177,13 @@ public class JSSEUtil extends SSLUtilBas
 
 
     @Override
+    protected boolean isTls13RenegAuthAvailable() {
+        // TLS 1.3 does not support authentication after the initial handshake
+        return false;
+    }
+
+
+    @Override
     public SSLContext createSSLContext(List<String> negotiableProtocols) 
throws NoSuchAlgorithmException {
         return new JSSESSLContext(sslHostConfig.getSslProtocol());
     }

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLUtil.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLUtil.java?rev=1843428&r1=1843427&r2=1843428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLUtil.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/openssl/OpenSSLUtil.java Wed 
Oct 10 11:56:09 2018
@@ -77,6 +77,13 @@ public class OpenSSLUtil extends SSLUtil
 
 
     @Override
+    protected boolean isTls13RenegAuthAvailable() {
+        // OpenSSL does support authentication after the initial handshake
+        return true;
+    }
+
+
+    @Override
     public SSLContext createSSLContext(List<String> negotiableProtocols) 
throws Exception {
         return new OpenSSLContext(certificate, negotiableProtocols);
     }



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

Reply via email to