如何显示Jetty HTTPS客户端可用的协议和密码套件?

时间:2013-09-10 10:07:58

标签: java ssl https cryptography jetty

我已配置Jetty嵌入式服务器以包含/排除某些协议和密码套件。有办法报告有关工作服务的人吗?我考虑getSupportedCipherSuites()getSupportedProtocols() javax.net.ssl.SSLServerSocket之类的东西,但是对于Jetty服务器对象。我的代码已经显示了来自移民的事情:

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.htm

报告的SSLServerSocket.getSupportedProtocols()的结果

但是对于Jetty环境,我不知道如何获得这样的列表。我通过调用排除了一些协议     sslContextFactory.addExcludeProtocols()(由于Chrome错误ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED in Google Chrome

,我已停用TLSv1.2

如何获取Jetty服务器可用的协议列表(不包括在内)?

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

SSLv2Hello
SSLv3
TLSv1
TLSv1.1

(TLSv1.2被禁用)

1 个答案:

答案 0 :(得分:0)

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

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_.*$");

如果您自己调用include / exclude方法,则必须处理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消息。