gpt4 book ai didi

java - 我如何禁止 Jetty 中的特定 SSL 协议(protocol)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:32 25 4
gpt4 key购买 nike

我有一个在 Jetty 6 上运行的 Web 应用程序 + Debian 6.0.7 上的 Open JDK 7。当客户端启动 HTTPS 连接时,我有接受 TLS 握手但 SSLv3.0 握手的安全要求。

在我的 jetty.xml 中,我将协议(protocol)设置为 TLS:

<New class="org.mortbay.jetty.security.SslSocketConnector">
<Set name="protocol">TLS</Set>
...

使用此配置,网络服务器似乎仍接受 SSLv3.0 握手。这已通过“sslscan”工具和运行“curl -sslv3 -kv {host}”进行验证。

是否可以将 Jetty 配置为仅接受 TLS 握手?如果需要,我愿意升级我的 Jetty 版本。

最佳答案

我找到了两个解决方案:

升级到 Jetty 9,支持 jetty.xml 条目:

<Arg name="sslContextFactory">
...
<Set name="excludeProtocols">
<Array type="java.lang.String">
<Item>SSLv3</Item>
</Array>
</Set>

或者,使用 Jetty 6 为 SslSocketConnector 和 SSLServerSocketFactory 创建委托(delegate)类:

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(); }
}

关于java - 我如何禁止 Jetty 中的特定 SSL 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19913403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com