我已经配置Jetty的嵌入式服务器包含/排除一些协议和加密套件。有没有办法来报告那些工作服务?我想是这样getSupportedCipherSuites()
和getSupportedProtocols()
javax.net.ssl.SSLServerSocket
,但对于Jetty服务器对象。我的代码已经具备了从CONFIGRATION的事情:
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
这是SSLServerSocket.getSupportedProtocols()
的结果由http://www.java2s.com/Code/JavaAPI/javax.net.ssl/SSLServerSocketgetSupportedProtocols.htm报道
但随着码头的环境,我不知道如何获得该名单。我通过调用sslContextFactory.addExcludeProtocols()
排除一些协议(我因为Chrome有错误,TLSv1.2
残疾人ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED in Google Chrome)
我怎样才能得到可用的协议的列表(不排除)为Jetty服务器?
我想这对我的环境这样的结果将是:
SSLv2Hello
SSLv3
TLSv1
TLSv1.1
(TLSv1.2工作是禁用)
我刚刚经历了类似的问题了。
码头的工作方式,它实例化一个默认SSLEngine
,然后将其应用于排除和其他偏好。默认情况下,码头9.4排除了以下协议:
this.addExcludeProtocols("SSL", "SSLv2", "SSLv2Hello", "SSLv3");
密码都以类似的方式进行管理,但你可以UGE正则表达式。默认情况下,码头9.4不包括以下情况:
this.setExcludeCipherSuites("^.*_(MD5|SHA|SHA1)$");
this.addExcludeCipherSuites("^TLS_RSA_.*$");
this.addExcludeCipherSuites("^SSL_.*$");
this.addExcludeCipherSuites("^.*_NULL_.*$");
this.addExcludeCipherSuites("^.*_anon_.*$");
如果调用包含/排除方法yourselp,你将不得不面对与码头进行,这可能造成混乱,处理的特定序列。所以,我建议你先用setter方法与空数组,以清除任何码头到位默认,然后添加你喜欢的项目。例:
// 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
和寻找客户问候消息。