You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2014/11/13 18:39:41 UTC
svn commit: r1639415 - in /tomcat/tc6.0.x/trunk: ./
java/org/apache/coyote/http11/ java/org/apache/tomcat/util/net/
java/org/apache/tomcat/util/net/jsse/
java/org/apache/tomcat/util/net/jsse/res/ webapps/docs/ webapps/docs/config/
Author: kkolinko
Date: Thu Nov 13 17:39:41 2014
New Revision: 1639415
URL: http://svn.apache.org/r1639415
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56780
Enable Tomcat to start when using a IBM JRE in strict SP800-131a mode
This back-ports the fix as well as some additional changes to more closely
align the Tomcat 6 code with the code in Tomcat 7.
Modified:
tomcat/tc6.0.x/trunk/STATUS.txt
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SSLImplementation.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEFactory.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEImplementation.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/res/LocalStrings.properties
tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
tomcat/tc6.0.x/trunk/webapps/docs/config/http.xml
Modified: tomcat/tc6.0.x/trunk/STATUS.txt
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=1639415&r1=1639414&r2=1639415&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/STATUS.txt (original)
+++ tomcat/tc6.0.x/trunk/STATUS.txt Thu Nov 13 17:39:41 2014
@@ -28,13 +28,7 @@ None
PATCHES PROPOSED TO BACKPORT:
[ New proposals should be added at the end of the list ]
-* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56780
- Enable Tomcat to start when using a IBM JRE in strict SP800-131a mode
- This back-ports the fix as well as some additional changes to more closely
- align the Tomcat 6 code with the code in Tomcat 7.
- https://people.apache.org/~kkolinko/patches/2014-11-09_tc6_bug56780-v3.patch
- +1: kkolinko, markt, remm
- -1:
+None
PATCHES/ISSUES THAT ARE STALLED:
Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=1639415&r1=1639414&r2=1639415&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java Thu Nov 13 17:39:41 2014
@@ -85,6 +85,7 @@ public class Http11Protocol extends Abst
protected Http11ConnectionHandler cHandler = new Http11ConnectionHandler(this);
protected JIoEndpoint endpoint = new JIoEndpoint();
+ @Override
protected final AbstractEndpoint getEndpoint() {
return endpoint;
}
@@ -155,7 +156,8 @@ public class Http11Protocol extends Abst
if (isSSLEnabled()) {
sslImplementation =
SSLImplementation.getInstance(sslImplementationName);
- socketFactory = sslImplementation.getServerSocketFactory();
+ socketFactory = sslImplementation.getServerSocketFactory(
+ (String) getAttribute("sslProtocol"));
endpoint.setServerSocketFactory(socketFactory);
} else if (socketFactoryName != null) {
socketFactory = (ServerSocketFactory) Class.forName(socketFactoryName).newInstance();
@@ -556,6 +558,7 @@ public class Http11Protocol extends Abst
protected ConcurrentLinkedQueue<Http11Processor> recycledProcessors =
new ConcurrentLinkedQueue<Http11Processor>() {
protected AtomicInteger size = new AtomicInteger(0);
+ @Override
public boolean offer(Http11Processor processor) {
boolean offer = (proto.processorCache == -1) ? true : (size.get() < proto.processorCache);
//avoid over growing our cache or add after we have stopped
@@ -570,6 +573,7 @@ public class Http11Protocol extends Abst
return result;
}
+ @Override
public Http11Processor poll() {
Http11Processor result = super.poll();
if ( result != null ) {
@@ -578,6 +582,7 @@ public class Http11Protocol extends Abst
return result;
}
+ @Override
public void clear() {
Http11Processor next = poll();
while ( next != null ) {
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SSLImplementation.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SSLImplementation.java?rev=1639415&r1=1639414&r2=1639415&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SSLImplementation.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SSLImplementation.java Thu Nov 13 17:39:41 2014
@@ -68,7 +68,7 @@ abstract public class SSLImplementation
if( JSSEImplementationClass.equals(className) ) {
return new org.apache.tomcat.util.net.jsse.JSSEImplementation();
}
- Class clazz=Class.forName(className);
+ Class<?> clazz=Class.forName(className);
return (SSLImplementation)clazz.newInstance();
} catch (Exception e){
if(logger.isDebugEnabled())
@@ -81,6 +81,7 @@ abstract public class SSLImplementation
abstract public String getImplementationName();
abstract public ServerSocketFactory getServerSocketFactory();
+ abstract public ServerSocketFactory getServerSocketFactory(String sslProtocol);
abstract public SSLSupport getSSLSupport(Socket sock);
/**
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEFactory.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEFactory.java?rev=1639415&r1=1639414&r2=1639415&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEFactory.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEFactory.java Thu Nov 13 17:39:41 2014
@@ -19,20 +19,19 @@ package org.apache.tomcat.util.net.jsse;
import java.net.Socket;
+import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import org.apache.tomcat.util.net.SSLSupport;
import org.apache.tomcat.util.net.ServerSocketFactory;
-import javax.net.ssl.SSLSession;
-/**
+/**
* Factory interface to construct components based on the JSSE version
* in use.
*
* @author Bill Barker
* @author Filip Hanik
*/
-
public class JSSEFactory {
/**
@@ -43,14 +42,24 @@ public class JSSEFactory {
}
/**
+ * Returns the ServerSocketFactory to use.
+ * @param sslProtocol Name of SSL protocol, e.g. "TLS". It is used to
+ * obtain an instance of <code>javax.net.ssl.SSLContext</code>. If it is
+ * <code>null</code> then a default will be used.
+ */
+ public ServerSocketFactory getSocketFactory(String sslProtocol) {
+ return new JSSESocketFactory(sslProtocol);
+ }
+
+ /**
* returns the SSLSupport attached to this socket.
*/
public SSLSupport getSSLSupport(Socket socket) {
return new JSSESupport((SSLSocket)socket);
}
-
+
public SSLSupport getSSLSupport(SSLSession session) {
return new JSSESupport(session);
}
-};
+}
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEImplementation.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEImplementation.java?rev=1639415&r1=1639414&r2=1639415&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEImplementation.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSEImplementation.java Thu Nov 13 17:39:41 2014
@@ -47,20 +47,30 @@ public class JSSEImplementation extends
}
+ @Override
public String getImplementationName(){
return "JSSE";
}
-
+
+ @Override
public ServerSocketFactory getServerSocketFactory() {
ServerSocketFactory ssf = factory.getSocketFactory();
return ssf;
- }
+ }
+
+ @Override
+ public ServerSocketFactory getServerSocketFactory(String sslProtocol) {
+ ServerSocketFactory ssf = factory.getSocketFactory(sslProtocol);
+ return ssf;
+ }
+ @Override
public SSLSupport getSSLSupport(Socket s) {
SSLSupport ssls = factory.getSSLSupport(s);
return ssls;
}
+ @Override
public SSLSupport getSSLSupport(SSLSession session) {
SSLSupport ssls = factory.getSSLSupport(session);
return ssls;
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java?rev=1639415&r1=1639414&r2=1639415&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java Thu Nov 13 17:39:41 2014
@@ -41,11 +41,11 @@ import java.security.cert.CollectionCert
import java.security.cert.PKIXBuilderParameters;
import java.security.cert.X509CertSelector;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import java.util.Vector;
import javax.net.ssl.CertPathTrustManagerParameters;
import javax.net.ssl.KeyManager;
@@ -79,65 +79,26 @@ import org.apache.tomcat.util.res.String
public class JSSESocketFactory
extends org.apache.tomcat.util.net.ServerSocketFactory {
+ private static final org.apache.juli.logging.Log log =
+ org.apache.juli.logging.LogFactory.getLog(JSSESocketFactory.class);
private static StringManager sm =
StringManager.getManager("org.apache.tomcat.util.net.jsse.res");
- private static final boolean RFC_5746_SUPPORTED;
-
- public static final String[] DEFAULT_SERVER_PROTOCOLS;
-
// defaults
- static String defaultProtocol = "TLS";
- static boolean defaultClientAuth = false;
- static String defaultKeystoreType = "JKS";
+ private static final String defaultProtocol = "TLS";
+ private static final String defaultKeystoreType = "JKS";
private static final String defaultKeystoreFile
= System.getProperty("user.home") + "/.keystore";
- private static final String defaultKeyPass = "changeit";
private static final int defaultSessionCacheSize = 0;
private static final int defaultSessionTimeout = 86400;
+ private static final String ALLOW_ALL_SUPPORTED_CIPHERS = "ALL";
+ private static final String defaultKeyPass = "changeit";
- static org.apache.juli.logging.Log log =
- org.apache.juli.logging.LogFactory.getLog(JSSESocketFactory.class);
-
- static {
- boolean result = false;
- SSLContext context;
- String[] protocols = null;
- try {
- context = SSLContext.getInstance("TLS");
- context.init(null, null, new SecureRandom());
- SSLServerSocketFactory ssf = context.getServerSocketFactory();
- String ciphers[] = ssf.getSupportedCipherSuites();
- for (String cipher : ciphers) {
- if ("TLS_EMPTY_RENEGOTIATION_INFO_SCSV".equals(cipher)) {
- result = true;
- break;
- }
- }
-
- // There is no API to obtain the default server protocols and cipher
- // suites. Having inspected the OpenJDK code there the same results
- // can be achieved via the standard API but there is no guarantee
- // that every JVM implementation determines the defaults the same
- // way. Therefore the defaults are determined by creating a server
- // socket and requested the configured values.
-
- SSLServerSocket socket = (SSLServerSocket) ssf.createServerSocket();
- // Filter out all the insecure protocols
- protocols = filterInsecureProcotols(socket.getEnabledProtocols());
- } catch (NoSuchAlgorithmException e) {
- // Assume no RFC 5746 support
- } catch (KeyManagementException e) {
- // Assume no RFC 5746 support
- } catch (IOException e) {
- // Unable to determine default ciphers/protocols so use none
- }
- RFC_5746_SUPPORTED = result;
- DEFAULT_SERVER_PROTOCOLS = protocols;
- }
+ private final boolean rfc5746Supported;
+ private final String[] defaultServerProtocols;
+ private final String[] defaultServerCipherSuites;
protected boolean initialized;
- protected String clientAuth = "false";
protected SSLServerSocketFactory sslProxy = null;
protected String[] enabledCiphers;
protected boolean allowUnsafeLegacyRenegotiation = false;
@@ -154,8 +115,80 @@ public class JSSESocketFactory
public JSSESocketFactory () {
+ this(null);
+ }
+
+ public JSSESocketFactory(String sslProtocol) {
+
+ if (sslProtocol == null) {
+ sslProtocol = defaultProtocol;
+ }
+
+ SSLContext context;
+ try {
+ context = SSLContext.getInstance(sslProtocol);
+ context.init(null, null, null);
+ } catch (NoSuchAlgorithmException e) {
+ // This is fatal for the connector so throw an exception to prevent
+ // it from starting
+ throw new IllegalArgumentException(e);
+ } catch (KeyManagementException e) {
+ // This is fatal for the connector so throw an exception to prevent
+ // it from starting
+ throw new IllegalArgumentException(e);
+ }
+
+ // Supported cipher suites aren't accessible directly from the
+ // SSLContext so use the SSL server socket factory
+ SSLServerSocketFactory ssf = context.getServerSocketFactory();
+ String supportedCiphers[] = ssf.getSupportedCipherSuites();
+ boolean found = false;
+ for (String cipher : supportedCiphers) {
+ if ("TLS_EMPTY_RENEGOTIATION_INFO_SCSV".equals(cipher)) {
+ found = true;
+ break;
+ }
+ }
+ rfc5746Supported = found;
+
+ // There is no standard way to determine the default protocols and
+ // cipher suites so create a server socket to see what the defaults are
+ SSLServerSocket socket;
+ try {
+ socket = (SSLServerSocket) ssf.createServerSocket();
+ } catch (IOException e) {
+ // This is very likely to be fatal but there is a slim chance that
+ // the JSSE implementation just doesn't like creating unbound
+ // sockets so allow the code to proceed.
+ defaultServerCipherSuites = new String[0];
+ defaultServerProtocols = new String[0];
+ log.warn(sm.getString("jsse.noDefaultCiphers"));
+ log.warn(sm.getString("jsse.noDefaultProtocols"));
+ return;
+ }
+
+ defaultServerCipherSuites = socket.getEnabledCipherSuites();
+ if (defaultServerCipherSuites.length == 0) {
+ log.warn(sm.getString("jsse.noDefaultCiphers"));
+ }
+
+ // Filter out all the SSL protocols (SSLv2 and SSLv3) from the defaults
+ // since they are no longer considered secure
+ List<String> filteredProtocols = new ArrayList<String>();
+ for (String protocol : socket.getEnabledProtocols()) {
+ if (protocol.contains("SSL")) {
+ log.debug(sm.getString("jsse.excludeDefaultProtocol", protocol));
+ continue;
+ }
+ filteredProtocols.add(protocol);
+ }
+ defaultServerProtocols = filteredProtocols.toArray(new String[filteredProtocols.size()]);
+ if (defaultServerProtocols.length == 0) {
+ log.warn(sm.getString("jsse.noDefaultProtocols"));
+ }
}
+ @Override
public ServerSocket createSocket (int port)
throws IOException
{
@@ -165,6 +198,7 @@ public class JSSESocketFactory
return socket;
}
+ @Override
public ServerSocket createSocket (int port, int backlog)
throws IOException
{
@@ -174,6 +208,7 @@ public class JSSESocketFactory
return socket;
}
+ @Override
public ServerSocket createSocket (int port, int backlog,
InetAddress ifAddress)
throws IOException
@@ -185,6 +220,7 @@ public class JSSESocketFactory
return socket;
}
+ @Override
public Socket acceptSocket(ServerSocket socket)
throws IOException
{
@@ -198,10 +234,11 @@ public class JSSESocketFactory
return asock;
}
+ @Override
public void handshake(Socket sock) throws IOException {
((SSLSocket)sock).startHandshake();
- if (!allowUnsafeLegacyRenegotiation && !RFC_5746_SUPPORTED) {
+ if (!allowUnsafeLegacyRenegotiation && !rfc5746Supported) {
// Prevent further handshakes by removing all cipher suites
((SSLSocket) sock).setEnabledCipherSuites(new String[0]);
}
@@ -216,70 +253,41 @@ public class JSSESocketFactory
* @return Array of SSL cipher suites to be enabled, or null if none of the
* requested ciphers are supported
*/
- protected String[] getEnabledCiphers(String requestedCiphers,
+ protected String[] getEnabledCiphers(String requestedCiphersStr,
String[] supportedCiphers) {
- String[] enabledCiphers = null;
+ if ((requestedCiphersStr == null)
+ || (requestedCiphersStr.trim().length() == 0)) {
+ return defaultServerCipherSuites;
+ }
- if (requestedCiphers != null) {
- Vector vec = null;
- String cipher = requestedCiphers;
- int index = requestedCiphers.indexOf(',');
- if (index != -1) {
- int fromIndex = 0;
- while (index != -1) {
- cipher = requestedCiphers.substring(fromIndex, index).trim();
- if (cipher.length() > 0) {
- /*
- * Check to see if the requested cipher is among the
- * supported ciphers, i.e., may be enabled
- */
- for (int i=0; supportedCiphers != null
- && i<supportedCiphers.length; i++) {
- if (supportedCiphers[i].equals(cipher)) {
- if (vec == null) {
- vec = new Vector();
- }
- vec.addElement(cipher);
- break;
- }
- }
- }
- fromIndex = index+1;
- index = requestedCiphers.indexOf(',', fromIndex);
- } // while
- cipher = requestedCiphers.substring(fromIndex);
- }
-
- if (cipher != null) {
- cipher = cipher.trim();
- if (cipher.length() > 0) {
- /*
- * Check to see if the requested cipher is among the
- * supported ciphers, i.e., may be enabled
- */
- for (int i=0; supportedCiphers != null
- && i<supportedCiphers.length; i++) {
- if (supportedCiphers[i].equals(cipher)) {
- if (vec == null) {
- vec = new Vector();
- }
- vec.addElement(cipher);
- break;
- }
- }
- }
+ List<String> requestedCiphers = new ArrayList<String>();
+ for (String rc : requestedCiphersStr.split(",")) {
+ final String cipher = rc.trim();
+ if (cipher.length() > 0) {
+ requestedCiphers.add(cipher);
}
+ }
+ if (requestedCiphers.isEmpty()) {
+ return defaultServerCipherSuites;
+ }
+ List<String> ciphers = new ArrayList<String>(requestedCiphers);
+ ciphers.retainAll(Arrays.asList(supportedCiphers));
- if (vec != null) {
- enabledCiphers = new String[vec.size()];
- vec.copyInto(enabledCiphers);
+ if (ciphers.isEmpty()) {
+ log.warn(sm.getString("jsse.requested_ciphers_not_supported",
+ requestedCiphersStr));
+ }
+ if (log.isDebugEnabled()) {
+ log.debug(sm.getString("jsse.enableable_ciphers", ciphers));
+ if (ciphers.size() != requestedCiphers.size()) {
+ List<String> skipped = new ArrayList<String>(requestedCiphers);
+ skipped.removeAll(ciphers);
+ log.debug(sm.getString("jsse.unsupported_ciphers", skipped));
}
- } else {
- enabledCiphers = sslProxy.getDefaultCipherSuites();
}
- return enabledCiphers;
+ return ciphers.toArray(new String[ciphers.size()]);
}
/*
@@ -527,8 +535,12 @@ public class JSSESocketFactory
// Determine which cipher suites to enable
String requestedCiphers = (String)attributes.get("ciphers");
- enabledCiphers = getEnabledCiphers(requestedCiphers,
- sslProxy.getSupportedCipherSuites());
+ if (ALLOW_ALL_SUPPORTED_CIPHERS.equals(requestedCiphers)) {
+ enabledCiphers = sslProxy.getSupportedCipherSuites();
+ } else {
+ enabledCiphers = getEnabledCiphers(requestedCiphers,
+ sslProxy.getSupportedCipherSuites());
+ }
allowUnsafeLegacyRenegotiation =
"true".equals(attributes.get("allowUnsafeLegacyRenegotiation"));
@@ -714,7 +726,7 @@ public class JSSESocketFactory
*/
protected void setEnabledProtocols(SSLServerSocket socket, String []protocols){
if (protocols == null) {
- socket.setEnabledProtocols(DEFAULT_SERVER_PROTOCOLS);
+ socket.setEnabledProtocols(defaultServerProtocols);
} else {
socket.setEnabledProtocols(protocols);
}
@@ -738,7 +750,7 @@ public class JSSESocketFactory
}
if (requestedProtocols == null) {
- return DEFAULT_SERVER_PROTOCOLS;
+ return defaultServerProtocols;
}
String[] requestedProtocolsArr = requestedProtocols.split(",");
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/res/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/res/LocalStrings.properties?rev=1639415&r1=1639414&r2=1639415&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/res/LocalStrings.properties (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/jsse/res/LocalStrings.properties Thu Nov 13 17:39:41 2014
@@ -17,8 +17,13 @@ jsse.alias_no_key_entry=Alias name {0} d
jsse.keystore_load_failed=Failed to load keystore type {0} with path {1} due to {2}
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.invalidTrustManagerClassName=The trustManagerClassName provided [{0}] does not implement javax.net.ssl.TrustManager
-jsse.excludeDefaultProtocol=The SSL protocol [{0}] which is enabled by default in this JRE was excluded from the defaults used by Tomcat
+jsse.requested_ciphers_not_supported=None of the ciphers specified are supported by the SSL engine : {0}
+jsse.enableable_ciphers=Specified SSL ciphers that are supported and enableable are : {0}
+jsse.unsupported_ciphers=Some specified SSL ciphers are not supported by the SSL engine : {0}
jsse.unsupportedProtocol=The specified SSL protocol [{0}] is not supported
+jsse.excludeDefaultProtocol=The SSL protocol [{0}] which is enabled by default in this JRE was excluded from the defaults used by Tomcat
+jsse.noDefaultCiphers=Unable to determine a default for ciphers. Set an explicit value to ensure the connector can start.
+jsse.noDefaultProtocols=Unable to determine a default for sslEnabledProtocols. Set an explicit value to ensure the connector can start.
jsseSupport.clientCertError=Error trying to obtain a certificate from the client
jseeSupport.certTranslationError=Error translating certificate [{0}]
jsseSupport.noCertWant=No client certificate sent for want
Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=1639415&r1=1639414&r2=1639415&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Thu Nov 13 17:39:41 2014
@@ -59,6 +59,10 @@
Based upon a patch by Marcel Šebek. (schultz/jfclere)
</fix>
<fix>
+ <bug>56780</bug>: Enable Tomcat to start when using SSL with an IBM JRE
+ in strict SP800-131a mode. (markt/kkolinko)
+ </fix>
+ <fix>
<bug>57102</bug>: Fix bug that meant sslEnabledProtocols setting was not
recognised for the HTTPS NIO connector. (markt)
</fix>
@@ -79,6 +83,11 @@
<bug>57116</bug>: Do not fallback to default protocol list for HTTPS BIO
connector if <code>sslEnabledProtocols</code> has no matches. (markt)
</fix>
+ <update>
+ Align calculation of default ciphers and default protocols for JSSE
+ HTTPS connectors with Tomcat 7 which allows for per connector defaults
+ based on the choice of <code>sslProtocol</code>. (markt/kkolinko)
+ </update>
</changelog>
</subsection>
<subsection name="Web applications">
Modified: tomcat/tc6.0.x/trunk/webapps/docs/config/http.xml
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/config/http.xml?rev=1639415&r1=1639414&r2=1639415&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/config/http.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/config/http.xml Thu Nov 13 17:39:41 2014
@@ -788,11 +788,15 @@
</attribute>
<attribute name="ciphers" required="false">
- <p>The comma separated list of encryption ciphers that this socket is
- allowed to use. By default, the default ciphers for the JVM will be used.
- Note that this usually means that the weak export grade ciphers will be
- included in the list of available ciphers. The ciphers are specified using
- the JSSE cipher naming convention.</p>
+ <p>The comma separated list of encryption ciphers to support for HTTPS
+ connections. If specified, only the ciphers that are listed and supported
+ by the SSL implementation will be used. By default, the default ciphers
+ for the JVM will be used. Note that this usually means that the weak
+ export grade ciphers will be included in the list of available ciphers.
+ The ciphers are specified using the JSSE cipher naming convention. The
+ special value of <code>ALL</code> will enable all supported ciphers. This
+ will include many that are not secure. <code>ALL</code> is intended for
+ testing purposes only.</p>
</attribute>
<attribute name="keyAlias" required="false">
@@ -861,8 +865,9 @@
<attribute name="sslEnabledProtocols" required="false">
<p>The comma separated list of SSL protocols to support for HTTPS
connections. If specified, only the protocols that are listed and
- supported by the SSL implementation will be enabled. If not specified,
- the JVM default is used. The permitted values may be obtained from the
+ supported by the SSL implementation will be enabled. If not specified,
+ the JVM default (excluding SSLv2 and SSLv3 if the JVM enables either or
+ both of them by default) is used. The permitted values may be obtained from the
JVM documentation for the allowed values for
<code>SSLSocket.setEnabledProtocols()</code> e.g.
<a href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/StandardNames.html#jssenames">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org