我已配置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被禁用)
答案 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消息。