Author: markt Date: Tue Apr 14 20:27:58 2015 New Revision: 1673552 URL: http://svn.apache.org/r1673552 Log: Add plumbing to parse SSLHostConfig from server.xml
Modified: tomcat/trunk/java/org/apache/catalina/connector/Connector.java tomcat/trunk/java/org/apache/catalina/startup/Catalina.java tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java Modified: tomcat/trunk/java/org/apache/catalina/connector/Connector.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Connector.java?rev=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/Connector.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/Connector.java Tue Apr 14 20:27:58 2015 @@ -35,6 +35,7 @@ import org.apache.coyote.ProtocolHandler import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.IntrospectionUtils; +import org.apache.tomcat.util.net.SSLHostConfig; import org.apache.tomcat.util.res.StringManager; @@ -851,6 +852,10 @@ public class Connector extends Lifecycle return "Internal"; } + + public void addSslHostConfig(SSLHostConfig sslHostConfig) { + protocolHandler.addSslHostConfig(sslHostConfig); + } // --------------------------------------------------------- Public Methods Modified: tomcat/trunk/java/org/apache/catalina/startup/Catalina.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/Catalina.java?rev=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/Catalina.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/Catalina.java Tue Apr 14 20:27:58 2015 @@ -336,6 +336,12 @@ public class Catalina { "addConnector", "org.apache.catalina.connector.Connector"); + digester.addObjectCreate("Server/Service/Connector/SSLHostConfig", + "org.apache.tomcat.util.net.SSLHostConfig"); + digester.addSetProperties("Server/Service/Connector/SSLHostConfig"); + digester.addSetNext("Server/Service/Connector/SSLHostConfig", + "addSslHostConfig", + "org.apache.tomcat.util.net.SSLHostConfig"); digester.addObjectCreate("Server/Service/Connector/Listener", null, // MUST be specified in the element Modified: tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java?rev=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java Tue Apr 14 20:27:58 2015 @@ -19,6 +19,8 @@ package org.apache.coyote; import java.util.concurrent.Executor; +import org.apache.tomcat.util.net.SSLHostConfig; + /** * Abstract the protocol implementation, including threading, etc. @@ -94,4 +96,7 @@ public interface ProtocolHandler { * Does this ProtocolHandler support sendfile? */ public boolean isSendfileSupported(); + + + public void addSslHostConfig(SSLHostConfig sslHostConfig); } Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java?rev=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java Tue Apr 14 20:27:58 2015 @@ -24,6 +24,7 @@ import org.apache.coyote.AbstractProtoco import org.apache.coyote.Processor; import org.apache.coyote.UpgradeProtocol; import org.apache.tomcat.util.net.AbstractEndpoint; +import org.apache.tomcat.util.net.SSLHostConfig; import org.apache.tomcat.util.net.SocketWrapperBase; import org.apache.tomcat.util.res.StringManager; @@ -126,6 +127,15 @@ public abstract class AbstractAjpProtoco } } + + // --------------------------------------------- SSL is not supported in AJP + + @Override + public void addSslHostConfig(SSLHostConfig sslHostConfig) { + getLog().warn(sm.getString("ajpprotocol.noSSL", sslHostConfig.getHostName())); + } + + protected void configureProcessor(AjpProcessor processor) { processor.setAdapter(getAdapter()); processor.setTomcatAuthentication(getTomcatAuthentication()); Modified: tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties?rev=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties Tue Apr 14 20:27:58 2015 @@ -12,6 +12,8 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +ajpprotocol.noSSL=SSL is not supported with AJP. The SSL host configuration for [{0}] was ignored + ajpnioprotocol.releaseStart=Iterating through our connections to release a socket channel [{0}] ajpnioprotocol.releaseEnd=Done iterating through our connections to release a socket channel [{0}] released [{1}] Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java?rev=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java Tue Apr 14 20:27:58 2015 @@ -327,12 +327,18 @@ public abstract class AbstractHttp11Prot // ----------------------------------------------- HTTPS specific properties // -------------------------------------------- Handled via an SSLHostConfig + @Override + public void addSslHostConfig(SSLHostConfig sslHostConfig) { + getEndpoint().addSslHostConfig(sslHostConfig); + } + + private SSLHostConfig defaultSSLHostConfig = null; private void registerDefaultSSLHostConfig() { if (defaultSSLHostConfig == null) { defaultSSLHostConfig = new SSLHostConfig(); defaultSSLHostConfig.setHostName(SSLHostConfig.DEFAULT_SSL_HOST_NAME); - getEndpoint().addHostConfig(defaultSSLHostConfig); + getEndpoint().addSslHostConfig(defaultSSLHostConfig); } } Modified: tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java?rev=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/spdy/SpdyProxyProtocol.java Tue Apr 14 20:27:58 2015 @@ -31,6 +31,7 @@ import org.apache.tomcat.spdy.SpdyContex import org.apache.tomcat.spdy.SpdyStream; import org.apache.tomcat.util.net.NioChannel; import org.apache.tomcat.util.net.NioEndpoint; +import org.apache.tomcat.util.net.SSLHostConfig; import org.apache.tomcat.util.net.SocketStatus; import org.apache.tomcat.util.net.SocketWrapperBase; @@ -143,4 +144,9 @@ public class SpdyProxyProtocol extends A // TODO Auto-generated method stub return null; } + + @Override + public void addSslHostConfig(SSLHostConfig sslHostConfig) { + // TODO Auto-generated method stub + } } 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=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Tue Apr 14 20:27:58 2015 @@ -216,7 +216,7 @@ public abstract class AbstractEndpoint<S // ----------------------------------------------------------------- Properties protected Map<String,SSLHostConfig> sslHostConfigs = new ConcurrentHashMap<>(); - public void addHostConfig(SSLHostConfig sslHostConfig) { + public void addSslHostConfig(SSLHostConfig sslHostConfig) { String key = sslHostConfig.getHostName(); if (key == null || key.length() == 0) { // TODO i18n Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Tue Apr 14 20:27:58 2015 @@ -493,10 +493,10 @@ public class AprEndpoint extends Abstrac // SSL protocol int value = SSL.SSL_PROTOCOL_NONE; - if (sslHostConfig.getSslProtocols().size() == 0) { + if (sslHostConfig.getProtocols().size() == 0) { value = SSL.SSL_PROTOCOL_ALL; } else { - for (String protocol : sslHostConfig.getSslProtocols()) { + for (String protocol : sslHostConfig.getProtocols()) { if ("SSLv2".equalsIgnoreCase(protocol)) { value |= SSL.SSL_PROTOCOL_SSLV2; } else if ("SSLv3".equalsIgnoreCase(protocol)) { 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=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SSLHostConfig.java Tue Apr 14 20:27:58 2015 @@ -25,7 +25,7 @@ public class SSLHostConfig { private String hostName; - private Set<String> sslProtocols = new HashSet<>(); + private Set<String> protocols = new HashSet<>(); public void setHostName(String hostName) { @@ -38,24 +38,24 @@ public class SSLHostConfig { } - public void setProtocols(String protocols) { + public void setProtocols(String input) { // OpenSSL and JSSE use the same names. - if (protocols.trim().equalsIgnoreCase("all")) { - protocols = "TLSv1+TLSv1.1+TLSv1.2"; + if (input.trim().equalsIgnoreCase("all")) { + input = "TLSv1+TLSv1.1+TLSv1.2"; } - String[] values = protocols.split(",|\\+"); + String[] values = input.split(",|\\+"); for (String value: values) { String trimmed = value.trim(); if (trimmed.length() > 0) { - sslProtocols.add(trimmed); + protocols.add(trimmed); } } } - public Set<String> getSslProtocols() { - return sslProtocols; + public Set<String> getProtocols() { + return protocols; } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java?rev=1673552&r1=1673551&r2=1673552&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java Tue Apr 14 20:27:58 2015 @@ -594,24 +594,24 @@ public class JSSESocketFactory implement @Override public String[] getEnableableProtocols(SSLContext context) { - if (sslHostConfig.getSslProtocols().size() == 0) { + if (sslHostConfig.getProtocols().size() == 0) { return defaultServerProtocols; } List<String> protocols = new ArrayList<>(); - protocols.addAll(sslHostConfig.getSslProtocols()); + protocols.addAll(sslHostConfig.getProtocols()); protocols.retainAll(Arrays.asList(context.getSupportedSSLParameters() .getProtocols())); if (protocols.isEmpty()) { log.warn(sm.getString("jsse.requested_protocols_not_supported", - sslHostConfig.getSslProtocols())); + sslHostConfig.getProtocols())); } if (log.isDebugEnabled()) { log.debug(sm.getString("jsse.enableable_protocols", protocols)); - if (protocols.size() != sslHostConfig.getSslProtocols().size()) { + if (protocols.size() != sslHostConfig.getProtocols().size()) { List<String> skipped = new ArrayList<>(); - skipped.addAll(sslHostConfig.getSslProtocols()); + skipped.addAll(sslHostConfig.getProtocols()); skipped.removeAll(protocols); log.debug(sm.getString("jsse.unsupported_protocols", skipped)); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org