Mercurial Hosting > luan
changeset 870:b745110a30f4
remove SslSocketConnector
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 03 Oct 2016 19:46:15 -0600 |
parents | 3f3675b1c83c |
children | 260f538f8fa7 |
files | src/org/eclipse/jetty/server/ssl/SslSocketConnector.java |
diffstat | 1 files changed, 0 insertions(+), 712 deletions(-) [+] |
line wrap: on
line diff
--- a/src/org/eclipse/jetty/server/ssl/SslSocketConnector.java Mon Oct 03 19:36:11 2016 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,712 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.server.ssl; - -import java.io.IOException; -import java.net.ServerSocket; -import java.net.Socket; - -import javax.net.ssl.HandshakeCompletedEvent; -import javax.net.ssl.HandshakeCompletedListener; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLException; -import javax.net.ssl.SSLServerSocket; -import javax.net.ssl.SSLSession; -import javax.net.ssl.SSLSocket; - -import org.eclipse.jetty.http.HttpSchemes; -import org.eclipse.jetty.io.EndPoint; -import org.eclipse.jetty.io.RuntimeIOException; -import org.eclipse.jetty.io.bio.SocketEndPoint; -import org.eclipse.jetty.server.Request; -import org.eclipse.jetty.server.bio.SocketConnector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.eclipse.jetty.util.ssl.SslContextFactory; - -/* ------------------------------------------------------------ */ -/** - * SSL Socket Connector. - * - * This specialization of SocketConnector is an abstract listener that can be used as the basis for a - * specific JSSE listener. - * - * The original of this class was heavily based on the work from Court Demas, which in turn is - * based on the work from Forge Research. Since JSSE, this class has evolved significantly from - * that early work. - * - * @org.apache.xbean.XBean element="sslSocketConnector" description="Creates an ssl socket connector" - * - * - */ -public class SslSocketConnector extends SocketConnector implements SslConnector -{ - private static final Logger LOG = LoggerFactory.getLogger(SslSocketConnector.class); - - private final SslContextFactory _sslContextFactory; - private int _handshakeTimeout = 0; //0 means use maxIdleTime - - /* ------------------------------------------------------------ */ - /** - * Constructor. - */ - public SslSocketConnector() - { - this(new SslContextFactory(SslContextFactory.DEFAULT_KEYSTORE_PATH)); - setSoLingerTime(30000); - } - - /* ------------------------------------------------------------ */ - public SslSocketConnector(SslContextFactory sslContextFactory) - { - _sslContextFactory = sslContextFactory; - } - - /* ------------------------------------------------------------ */ - /** - * @return True if SSL re-negotiation is allowed (default false) - */ - public boolean isAllowRenegotiate() - { - return _sslContextFactory.isAllowRenegotiate(); - } - - /* ------------------------------------------------------------ */ - /** - * Set if SSL re-negotiation is allowed. CVE-2009-3555 discovered - * a vulnerability in SSL/TLS with re-negotiation. If your JVM - * does not have CVE-2009-3555 fixed, then re-negotiation should - * not be allowed. - * @param allowRenegotiate true if re-negotiation is allowed (default false) - */ - public void setAllowRenegotiate(boolean allowRenegotiate) - { - _sslContextFactory.setAllowRenegotiate(allowRenegotiate); - } - - /* ------------------------------------------------------------ */ - @Override - public void accept(int acceptorID) - throws IOException, InterruptedException - { - Socket socket = _serverSocket.accept(); - configure(socket); - - ConnectorEndPoint connection=new SslConnectorEndPoint(socket); - connection.dispatch(); - } - - /* ------------------------------------------------------------ */ - @Override - protected void configure(Socket socket) - throws IOException - { - super.configure(socket); - } - - /* ------------------------------------------------------------ */ - /** - * Allow the Listener a chance to customise the request. before the server does its stuff. <br> - * This allows the required attributes to be set for SSL requests. <br> - * The requirements of the Servlet specs are: - * <ul> - * <li> an attribute named "javax.servlet.request.ssl_id" of type String (since Spec 3.0).</li> - * <li> an attribute named "javax.servlet.request.cipher_suite" of type String.</li> - * <li> an attribute named "javax.servlet.request.key_size" of type Integer.</li> - * <li> an attribute named "javax.servlet.request.X509Certificate" of type - * java.security.cert.X509Certificate[]. This is an array of objects of type X509Certificate, - * the order of this array is defined as being in ascending order of trust. The first - * certificate in the chain is the one set by the client, the next is the one used to - * authenticate the first, and so on. </li> - * </ul> - * - * @param endpoint The Socket the request arrived on. - * This should be a {@link SocketEndPoint} wrapping a {@link SSLSocket}. - * @param request HttpRequest to be customised. - */ - @Override - public void customize(EndPoint endpoint, Request request) - throws IOException - { - super.customize(endpoint, request); - request.setScheme(HttpSchemes.HTTPS); - - SocketEndPoint socket_end_point = (SocketEndPoint)endpoint; - SSLSocket sslSocket = (SSLSocket)socket_end_point.getTransport(); - SSLSession sslSession = sslSocket.getSession(); - - SslCertificates.customize(sslSession,endpoint,request); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getExcludeCipherSuites() - * @deprecated - */ - @Deprecated - public String[] getExcludeCipherSuites() { - return _sslContextFactory.getExcludeCipherSuites(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getIncludeCipherSuites() - * @deprecated - */ - @Deprecated - public String[] getIncludeCipherSuites() - { - return _sslContextFactory.getIncludeCipherSuites(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getKeystore() - * @deprecated - */ - @Deprecated - public String getKeystore() - { - return _sslContextFactory.getKeyStorePath(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getKeystoreType() - * @deprecated - */ - @Deprecated - public String getKeystoreType() - { - return _sslContextFactory.getKeyStoreType(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getNeedClientAuth() - * @deprecated - */ - @Deprecated - public boolean getNeedClientAuth() - { - return _sslContextFactory.getNeedClientAuth(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getProtocol() - * @deprecated - */ - @Deprecated - public String getProtocol() - { - return _sslContextFactory.getProtocol(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getProvider() - * @deprecated - */ - @Deprecated - public String getProvider() { - return _sslContextFactory.getProvider(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getSecureRandomAlgorithm() - * @deprecated - */ - @Deprecated - public String getSecureRandomAlgorithm() - { - return _sslContextFactory.getSecureRandomAlgorithm(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getSslKeyManagerFactoryAlgorithm() - * @deprecated - */ - @Deprecated - public String getSslKeyManagerFactoryAlgorithm() - { - return _sslContextFactory.getSslKeyManagerFactoryAlgorithm(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getSslTrustManagerFactoryAlgorithm() - * @deprecated - */ - @Deprecated - public String getSslTrustManagerFactoryAlgorithm() - { - return _sslContextFactory.getTrustManagerFactoryAlgorithm(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getTruststore() - * @deprecated - */ - @Deprecated - public String getTruststore() - { - return _sslContextFactory.getTrustStore(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getSslContextFactory() - */ -// @Override - public SslContextFactory getSslContextFactory() - { - return _sslContextFactory; - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getTruststoreType() - * @deprecated - */ - @Deprecated - public String getTruststoreType() - { - return _sslContextFactory.getTrustStoreType(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#getWantClientAuth() - * @deprecated - */ - @Deprecated - public boolean getWantClientAuth() - { - return _sslContextFactory.getWantClientAuth(); - } - - /* ------------------------------------------------------------ */ - /** - * By default, we're confidential, given we speak SSL. But, if we've been told about an - * confidential port, and said port is not our port, then we're not. This allows separation of - * listeners providing INTEGRAL versus CONFIDENTIAL constraints, such as one SSL listener - * configured to require client certs providing CONFIDENTIAL, whereas another SSL listener not - * requiring client certs providing mere INTEGRAL constraints. - */ - @Override - public boolean isConfidential(Request request) - { - final int confidentialPort = getConfidentialPort(); - return confidentialPort == 0 || confidentialPort == request.getServerPort(); - } - - /* ------------------------------------------------------------ */ - /** - * By default, we're integral, given we speak SSL. But, if we've been told about an integral - * port, and said port is not our port, then we're not. This allows separation of listeners - * providing INTEGRAL versus CONFIDENTIAL constraints, such as one SSL listener configured to - * require client certs providing CONFIDENTIAL, whereas another SSL listener not requiring - * client certs providing mere INTEGRAL constraints. - */ - @Override - public boolean isIntegral(Request request) - { - final int integralPort = getIntegralPort(); - return integralPort == 0 || integralPort == request.getServerPort(); - } - - /* ------------------------------------------------------------ */ - @Override - public void open() throws IOException - { - _sslContextFactory.checkKeyStore(); - try - { - _sslContextFactory.start(); - } - catch(Exception e) - { - throw new RuntimeIOException(e); - } - super.open(); - } - - /* ------------------------------------------------------------ */ - /** - * {@inheritDoc} - */ - @Override - protected void doStart() throws Exception - { - _sslContextFactory.checkKeyStore(); - _sslContextFactory.start(); - - super.doStart(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.bio.SocketConnector#doStop() - */ - @Override - protected void doStop() throws Exception - { - _sslContextFactory.stop(); - - super.doStop(); - } - - /* ------------------------------------------------------------ */ - /** - * @param host The host name that this server should listen on - * @param port the port that this server should listen on - * @param backlog See {@link ServerSocket#bind(java.net.SocketAddress, int)} - * @return A new {@link ServerSocket socket object} bound to the supplied address with all other - * settings as per the current configuration of this connector. - * @see #setWantClientAuth(boolean) - * @see #setNeedClientAuth(boolean) - * @exception IOException - */ - @Override - protected ServerSocket newServerSocket(String host, int port,int backlog) throws IOException - { - return _sslContextFactory.newSslServerSocket(host,port,backlog); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setExcludeCipherSuites(java.lang.String[]) - * @deprecated - */ - @Deprecated - public void setExcludeCipherSuites(String[] cipherSuites) - { - _sslContextFactory.setExcludeCipherSuites(cipherSuites); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setIncludeCipherSuites(java.lang.String[]) - * @deprecated - */ - @Deprecated - public void setIncludeCipherSuites(String[] cipherSuites) - { - _sslContextFactory.setIncludeCipherSuites(cipherSuites); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setKeyPassword(java.lang.String) - * @deprecated - */ - @Deprecated - public void setKeyPassword(String password) - { - _sslContextFactory.setKeyManagerPassword(password); - } - - /* ------------------------------------------------------------ */ - /** - * @param keystore The resource path to the keystore, or null for built in keystores. - * @deprecated - */ - @Deprecated - public void setKeystore(String keystore) - { - _sslContextFactory.setKeyStorePath(keystore); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setKeystoreType(java.lang.String) - * @deprecated - */ - @Deprecated - public void setKeystoreType(String keystoreType) - { - _sslContextFactory.setKeyStoreType(keystoreType); - } - - /* ------------------------------------------------------------ */ - /** - * Set the value of the needClientAuth property - * - * @param needClientAuth true iff we require client certificate authentication. - * @deprecated - */ - @Deprecated - public void setNeedClientAuth(boolean needClientAuth) - { - _sslContextFactory.setNeedClientAuth(needClientAuth); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setPassword(java.lang.String) - * @deprecated - */ - @Deprecated - public void setPassword(String password) - { - _sslContextFactory.setKeyStorePassword(password); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setTrustPassword(java.lang.String) - * @deprecated - */ - @Deprecated - public void setTrustPassword(String password) - { - _sslContextFactory.setTrustStorePassword(password); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setProtocol(java.lang.String) - * @deprecated - */ - @Deprecated - public void setProtocol(String protocol) - { - _sslContextFactory.setProtocol(protocol); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setProvider(java.lang.String) - * @deprecated - */ - @Deprecated - public void setProvider(String provider) { - _sslContextFactory.setProvider(provider); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setSecureRandomAlgorithm(java.lang.String) - * @deprecated - */ - @Deprecated - public void setSecureRandomAlgorithm(String algorithm) - { - _sslContextFactory.setSecureRandomAlgorithm(algorithm); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setSslKeyManagerFactoryAlgorithm(java.lang.String) - * @deprecated - */ - @Deprecated - public void setSslKeyManagerFactoryAlgorithm(String algorithm) - { - _sslContextFactory.setSslKeyManagerFactoryAlgorithm(algorithm); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setSslTrustManagerFactoryAlgorithm(java.lang.String) - * @deprecated - */ - @Deprecated - public void setSslTrustManagerFactoryAlgorithm(String algorithm) - { - _sslContextFactory.setTrustManagerFactoryAlgorithm(algorithm); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setTruststore(java.lang.String) - * @deprecated - */ - @Deprecated - public void setTruststore(String truststore) - { - _sslContextFactory.setTrustStore(truststore); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setTruststoreType(java.lang.String) - * @deprecated - */ - @Deprecated - public void setTruststoreType(String truststoreType) - { - _sslContextFactory.setTrustStoreType(truststoreType); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setSslContext(javax.net.ssl.SSLContext) - * @deprecated - */ - @Deprecated - public void setSslContext(SSLContext sslContext) - { - _sslContextFactory.setSslContext(sslContext); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.server.ssl.SslConnector#setSslContext(javax.net.ssl.SSLContext) - * @deprecated - */ - @Deprecated - public SSLContext getSslContext() - { - return _sslContextFactory.getSslContext(); - } - - /* ------------------------------------------------------------ */ - /** - * Set the value of the _wantClientAuth property. This property is used - * internally when opening server sockets. - * - * @param wantClientAuth true if we want client certificate authentication. - * @see SSLServerSocket#setWantClientAuth - * @deprecated - */ - @Deprecated - public void setWantClientAuth(boolean wantClientAuth) - { - _sslContextFactory.setWantClientAuth(wantClientAuth); - } - - /* ------------------------------------------------------------ */ - /** - * Set the time in milliseconds for so_timeout during ssl handshaking - * @param msec a non-zero value will be used to set so_timeout during - * ssl handshakes. A zero value means the maxIdleTime is used instead. - */ - public void setHandshakeTimeout (int msec) - { - _handshakeTimeout = msec; - } - - - /* ------------------------------------------------------------ */ - public int getHandshakeTimeout () - { - return _handshakeTimeout; - } - - /* ------------------------------------------------------------ */ - public class SslConnectorEndPoint extends ConnectorEndPoint - { - public SslConnectorEndPoint(Socket socket) throws IOException - { - super(socket); - } - - @Override - public void shutdownOutput() throws IOException - { - close(); - } - - @Override - public void shutdownInput() throws IOException - { - close(); - } - - @Override - public void run() - { - try - { - int handshakeTimeout = getHandshakeTimeout(); - int oldTimeout = _socket.getSoTimeout(); - if (handshakeTimeout > 0) - _socket.setSoTimeout(handshakeTimeout); - - final SSLSocket ssl=(SSLSocket)_socket; - ssl.addHandshakeCompletedListener(new HandshakeCompletedListener() - { - boolean handshook=false; - public void handshakeCompleted(HandshakeCompletedEvent event) - { - if (handshook) - { - if (!_sslContextFactory.isAllowRenegotiate()) - { - LOG.warn("SSL renegotiate denied: "+ssl); - try{ssl.close();}catch(IOException e){LOG.warn("",e);} - } - } - else - handshook=true; - } - }); - ssl.startHandshake(); - - if (handshakeTimeout>0) - _socket.setSoTimeout(oldTimeout); - - super.run(); - } - catch (SSLException e) - { - LOG.debug("",e); - try{close();} - catch(IOException e2){LOG.trace("",e2);} - } - catch (IOException e) - { - LOG.debug("",e); - try{close();} - catch(IOException e2){LOG.trace("",e2);} - } - } - } - - /* ------------------------------------------------------------ */ - /** - * Unsupported. - * - * TODO: we should remove this as it is no longer an overridden method from SslConnector (like it was in the past) - * @deprecated - */ - @Deprecated - public String getAlgorithm() - { - throw new UnsupportedOperationException(); - } - - /* ------------------------------------------------------------ */ - /** - * Unsupported. - * - * TODO: we should remove this as it is no longer an overridden method from SslConnector (like it was in the past) - * @deprecated - */ - @Deprecated - public void setAlgorithm(String algorithm) - { - throw new UnsupportedOperationException(); - } -}