我有一个web应用程序运行在Jetty 6+ Open 7上Debian6.0.7上。当客户端启动HTTPS连接时,我需要接受TLS握手,而不是SSLv3.0握手。
在我的jetty.xml中,我将协议设置为TLS:
<New class="org.mortbay.jetty.security.SslSocketConnector">
<Set name="protocol">TLS</Set>
...使用此配置,web服务器似乎仍然接受SSLv3.0握手。这已经通过'sslscan‘工具和运行'curl -sslv3 -kv {host}’进行了验证。
是否可以将Jetty配置为只接受TLS握手?如果需要,我愿意升级我的Jetty版本。
发布于 2013-11-12 19:01:52
我找到了两个解决方案:
升级到Jetty 9,它支持jetty.xml条目:
<Arg name="sslContextFactory">
...
<Set name="excludeProtocols">
<Array type="java.lang.String">
<Item>SSLv3</Item>
</Array>
</Set>或者,使用Jetty 6为SslSocketConnector和SSLServerSocketFactory创建委托类:
jetty.xml:
...
<New class="com.src.TlsSocketConnector">
...
</New>
public class TlsSocketConnector extends SslSocketConnector {
@Override
protected SSLServerSocketFactory createFactory() throws Exception {
return new TlsServerSocketFactory( super.createFactory() );
}
}
public class TlsServerSocketFactory extends SSLServerSocketFactory {
private SSLServerSocketFactory delegate;
public TlsServerSocketFactory( SSLServerSocketFactory delegate ) {
this.delegate = delegate;
}
//Repeat this pattern for all createServerSocket() methods
public ServerSocket createServerSocket() throws IOException {
SSLServerSocket socket = (SSLServerSocket) delegate.createServerSocket();
socket.setEnabledProtocols( new String[]{"TLSv1", "TLSv1.1", "TLSv1.2"});
return socket;
}
// Directly delegated methods from SSLServerSocketFactory
public String[] getDefaultCipherSuites() { return delegate.getDefaultCipherSuites(); }
public String[] getSupportedCipherSuites() { return delegate.getSupportedCipherSuites(); }
}发布于 2014-11-14 22:17:41
对于Jetty 6,您还可以创建一个覆盖的SslSelectChannelConnector来删除SSLv3,如下所示:
package com.mycompany;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.net.ssl.SSLEngine;
import org.mortbay.jetty.security.SslSelectChannelConnector;
public class SslSelectChannelConnectorNoSsl3 extends SslSelectChannelConnector {
@Override
protected SSLEngine createSSLEngine() throws IOException {
SSLEngine engine = super.createSSLEngine();
Set<String> protocols = new HashSet<String>(Arrays.asList(engine.getEnabledProtocols()));
protocols.removeAll(Arrays.asList("SSLv2Hello","SSLv3"));
engine.setEnabledProtocols(protocols.toArray(new String[protocols.size()]));
return engine;
}
}然后在jetty.xml中指定连接器,如下所示:
<Call name="addConnector">
<Arg>
<New class="com.mycompany.SslSelectChannelConnectorNoSsl3">
...
</New>
</Arg>
</Call> https://stackoverflow.com/questions/19913403
复制相似问题