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/10/06 12:24:48 UTC
svn commit: r1706978 - in
/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net: TestSsl.java
TesterSupport.java
Author: markt
Date: Tue Oct 6 10:24:47 2015
New Revision: 1706978
URL: http://svn.apache.org/viewvc?rev=1706978&view=rev
Log:
Java6 uses SSLv2Hello which Tomcat has disabled by default. Use a custom SSLSocketFactory to disable SSLv2Hello (and SSLv2) on the client side.
Modified:
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestSsl.java
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TesterSupport.java
Modified: tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestSsl.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestSsl.java?rev=1706978&r1=1706977&r2=1706978&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestSsl.java (original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestSsl.java Tue Oct 6 10:24:47 2015
@@ -170,7 +170,8 @@ public class TestSsl extends TomcatBaseT
SSLContext sslCtx = SSLContext.getInstance("TLS");
sslCtx.init(null, TesterSupport.getTrustManagers(), null);
- SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
+ SSLSocketFactory socketFactory =
+ new TesterSupport.NoSSLv2SocketFactory(sslCtx.getSocketFactory());
SSLSocket socket = (SSLSocket) socketFactory.createSocket("localhost",
getPort());
Modified: tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TesterSupport.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TesterSupport.java?rev=1706978&r1=1706977&r2=1706978&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TesterSupport.java (original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TesterSupport.java Tue Oct 6 10:24:47 2015
@@ -20,16 +20,25 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.net.InetAddress;
+import java.net.Socket;
import java.net.URISyntaxException;
+import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
@@ -162,11 +171,13 @@ public final class TesterSupport {
protected static void configureClientSsl() {
try {
+ System.setProperty("https.protocols", "TLSv1");
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(TesterSupport.getUser1KeyManagers(),
TesterSupport.getTrustManagers(),
null);
- javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+ javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(
+ new NoSSLv2SocketFactory(sc.getSocketFactory()));
} catch (Exception e) {
e.printStackTrace();
}
@@ -297,4 +308,64 @@ public final class TesterSupport {
// NOOP - Trust everything
}
}
+
+ public static class NoSSLv2SocketFactory extends SSLSocketFactory {
+
+ SSLSocketFactory factory;
+
+ public NoSSLv2SocketFactory(SSLSocketFactory factory) {
+ this.factory = factory;
+ }
+
+ @Override
+ public String[] getDefaultCipherSuites() {
+ return factory.getDefaultCipherSuites();
+ }
+
+ @Override
+ public String[] getSupportedCipherSuites() {
+ return factory.getSupportedCipherSuites();
+ }
+
+ @Override
+ public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
+ return filterProtocols((SSLSocket) factory.createSocket(s, host, port, autoClose));
+ }
+
+ @Override
+ public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
+ return filterProtocols((SSLSocket) factory.createSocket(host, port));
+ }
+
+ @Override
+ public Socket createSocket(InetAddress host, int port) throws IOException {
+ return filterProtocols((SSLSocket) factory.createSocket(host, port));
+ }
+
+ @Override
+ public Socket createSocket(String host, int port, InetAddress localHost, int localPort)
+ throws IOException, UnknownHostException {
+ return filterProtocols((SSLSocket) factory.createSocket(host, port, localHost, localPort));
+ }
+
+ @Override
+ public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort)
+ throws IOException {
+ return filterProtocols((SSLSocket) factory.createSocket(address, port, localAddress, localPort));
+ }
+
+ private SSLSocket filterProtocols(SSLSocket socket) {
+ List<String> protocols = new ArrayList<String>();
+ protocols.addAll(Arrays.asList(socket.getSupportedProtocols()));
+ Iterator<String> protocolsIter = protocols.iterator();
+ while (protocolsIter.hasNext()) {
+ String protocol = protocolsIter.next();
+ if (protocol.contains("SSLv2")) {
+ protocolsIter.remove();
+ }
+ }
+ socket.setEnabledProtocols(protocols.toArray(new String[protocols.size()]));
+ return socket;
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org