gpt4 book ai didi

java - Jetty 在 8u60 中表现不同?

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:04 25 4
gpt4 key购买 nike

我正在尝试追踪在 8u60 中使用 SSL 而不是在以前的 Java 版本中我们的应用程序中断的问题。在 8u60 中,当尝试建立 HTTPS 连接时,我们得到 javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) ,并在适当的地方放置断点,我看到密码套件列表确实是空的,而它填充了我在 8u45 或更早版本中运行相同代码时所期望的值。

显示此行为的 SSCCE(假设您在正确的相对路径中有证书 keystore ...)我在 SSCCE 中使用 Jetty 9.3.0,但我们的应用程序使用 9.2.x,fwiw :

public class HelloWorldSSL extends AbstractHandler {
private static final int HTTP_PORT = 9999;
private static final int SSL_PORT = 9998;

public void handle(String s, Request request, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws IOException, ServletException {
httpServletResponse.setContentType("text/html;charset=utf-8");
httpServletResponse.setStatus(HttpServletResponse.SC_OK);
request.setHandled(true);
httpServletResponse.getWriter().println("<h1>Hello World</h1>");
}

public static void main(String[] args) throws Exception
{
Server server = new Server();

// HTTP Configuration
HttpConfiguration httpConfig = new HttpConfiguration();
httpConfig.setSecureScheme("https");
httpConfig.setSecurePort(SSL_PORT);

// HTTP Connector
ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));
httpConnector.setPort(HTTP_PORT);
server.addConnector(httpConnector);

// SSL Configuration
String keystorePath = "src/main/resources/keystore.jks";
File keyStoreFile = new File(keystorePath);
if (keyStoreFile.exists()) {
SslContextFactory sslContextFactory = new SslContextFactory(keystorePath);
sslContextFactory.setKeyStorePassword("123456");

String[] defaultCiphers = new String[] { "TLS_RSA_WITH_RC4_128_SHA", "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
"SSL_RSA_WITH_RC4_128_MD5", "SSL_RSA_WITH_RC4_128_SHA", "ECDHE-RSA-AES256-SHA384",
"AES256-SHA-256", "SSL_RSA_WITH_RC4_128_SHA", "TLS_KRB5_WITH_RC4_128_SHA" };
sslContextFactory.setIncludeCipherSuites(defaultCiphers);
HttpConfiguration sslConfig = new HttpConfiguration(httpConfig);
sslConfig.addCustomizer(new SecureRequestCustomizer());
ServerConnector sslConnector = new ServerConnector(server, sslContextFactory,
new HttpConnectionFactory(sslConfig));
sslConnector.setPort(SSL_PORT);
sslConnector.setAcceptQueueSize(5);
server.addConnector(sslConnector);

}
HandlerList handlers = new HandlerList();
handlers.addHandler(new HelloWorldSSL());
server.setHandler(handlers);

server.start();
server.join();
}
}

有什么明显的错误可以解释为什么它在 8u45 中工作而不在 8u60 中工作吗?查看 8u60 更改日志没有帮助。 (尝试浏览 Jetty 的错误报告一直是一场噩梦。叹息)

[编辑]通过阅读 Java 错误报告,我尝试删除 sslContextFactory.setIncludeCipherSuites(defaultCiphers); 行,现在代码可以在 8u60 中运行。仍然希望有人知道为什么会这样......

最佳答案

通过试验和 Jetty 人员的一些帮助找到了答案。看起来 Java 的可接受密码列表已从 8u45 更改为 8u60,并且上面数组中的所有密码都不在新的可接受列表中,导致可接受密码列表为空。

从添加默认密码列表更改为添加默认协议(protocol) (TLSv1.2),这使得一切都可以在 8u60 和之前的版本中运行,并且启动起来更加安全。

关于java - Jetty 在 8u60 中表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31325752/

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