2

我已将 Jetty 嵌入式服务器配置为包含/排除某些协议和密码套件。有没有办法报告那些在工作的服务?我想到了类似的东西,getSupportedCipherSuites()但对于 Jetty 服务器对象。我的代码已经显示了配置中的内容:getSupportedProtocols()javax.net.ssl.SSLServerSocket

HTTPSPDYServerConnector SSLconnector = new HTTPSPDYServerConnector(server, sslContextFactory);
SSLconnector.setPort(PortHTTPS);
...
server.setConnectors(new Connector[] { SSLconnector });
...
showInfo(sslContextFactory.getIncludeCipherSuites());
showInfo(sslContextFactory.getExcludeCipherSuites());
showInfo(sslContextFactory.getIncludeProtocols());
showInfo(sslContextFactory.getExcludeProtocols());
...
server.start();

现在我想看看客户端可以使用哪些协议和密码套件。

编辑(更多信息):

我的环境可以使用这些协议:

SSLv2Hello
SSLv3
TLSv1
TLSv1.1
TLSv1.2

这是http://www.java2s.com/Code/JavaAPI/javax.net.ssl/SSLServerSocketgetSupportedProtocols.htmSSLServerSocket.getSupportedProtocols()报告的结果

但是对于 Jetty 环境,我不知道如何获得这样的列表。我通过调用排除了一些协议 (由于谷歌浏览器中的 Chrome 错误ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILEDsslContextFactory.addExcludeProtocols()我禁用了)TLSv1.2

如何获取 Jetty 服务器可用(不排除)的协议列表?

我想对于我的环境,这样的结果将是:

SSLv2Hello
SSLv3
TLSv1
TLSv1.1

(TLSv1.2 被禁用)

4

1 回答 1

1

我刚刚遇到了类似的问题。

Jetty 的工作方式是实例化默认值SSLEngine,然后应用排除项和其他首选项。默认情况下,Jetty 9.4 排除以下协议:

this.addExcludeProtocols("SSL", "SSLv2", "SSLv2Hello", "SSLv3");

密码的管理方式类似,但您可以使用正则表达式。默认情况下,Jetty 9.4 不包括以下内容:

this.setExcludeCipherSuites("^.*_(MD5|SHA|SHA1)$");
        this.addExcludeCipherSuites("^TLS_RSA_.*$");
        this.addExcludeCipherSuites("^SSL_.*$");
        this.addExcludeCipherSuites("^.*_NULL_.*$");
        this.addExcludeCipherSuites("^.*_anon_.*$");

如果您自己调用包含/排除方法,您将不得不处理 Jetty 执行的特定处理序列,这可能会造成混淆。因此,我建议您首先对空数组使用 setter 方法,以便清除默认情况下 Jetty 放置的任何内容,然后添加您喜欢的项目。例子:

// empty the collections, we don't need no education
sslContextFactory.setExcludeProtocols(new String[]{});
sslContextFactory.setExcludeCipherSuites(new String[]{});

// tell me what you want, what you really really want
sslContextFactory.setIncludeProtocols("TLSv1","TLSv1.1","TLSv1.2");
sslContextFactory.setIncludeCipherSuites(omgIveNeverSeenSuchABigArrayOfCiphers);

如果您需要特定 Java 客户端支持的密码列表,请运行该客户端-Djavax.net.debug=ssl:handshake:verbose并查找 ClientHello 消息。

于 2019-02-11T16:58:09.140 回答