Java 如何显示Jetty HTTPS客户端可用的协议和密码套件?
我已将Jetty嵌入式服务器配置为包括/排除一些协议和密码套件。有没有办法报告在职人员?我考虑的是Java 如何显示Jetty HTTPS客户端可用的协议和密码套件?,java,ssl,https,cryptography,jetty,Java,Ssl,Https,Cryptography,Jetty,我已将Jetty嵌入式服务器配置为包括/排除一些协议和密码套件。有没有办法报告在职人员?我考虑的是javax.net.ssl.SSLServerSocket的getSupportedCipherSuite()和getSupportedProtocols(),但对于Jetty服务器对象。我的代码已经显示了配置中的内容: HTTPSPDYServerConnector SSLconnector = new HTTPSPDYServerConnector(server, sslContextFacto
javax.net.ssl.SSLServerSocket
的getSupportedCipherSuite()
和getSupportedProtocols()
,但对于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
这是由报告的SSLServerSocket.getSupportedProtocols()
的结果
但对于Jetty环境,我不知道如何获得这样的列表。我打电话排除了一些协议
sslContextFactory.addExcludeProtocols()
(由于Chrome错误,我禁用了TLSv1.2
)
如何获取Jetty server可用(未排除)的协议列表
我认为,对于我的环境,这样的结果将是:
SSLv2Hello
SSLv3
TLSv1
TLSv1.1
(TLSv1.2被禁用)我刚刚遇到了一个类似的问题 Jetty的工作方式是实例化默认的
SSLEngine
,然后应用排除和其他首选项。默认情况下,Jetty 9.4不包括以下协议:
SSLv2Hello
SSLv3
TLSv1
TLSv1.1
TLSv1.2
this.addExcludeProtocols(“SSL”、“SSLv2”、“SSLv2Hello”、“SSLv3”);
密码的管理方式与此类似,但您可以使用uge正则表达式。默认情况下,Jetty 9.4不包括以下内容:
this.setExcludeCipherSuite(“^.*(MD5 | SHA | SHA1)$”;
此.addExcludeCipherSuites(“^TLS\U RSA.*$”);
此.addExcludeCipherSuites(“^SSL.*$”);
此.addExcludeCipherSuites(“^.*.\u NULL.*.$”);
本附录中添加了除外的字符集(“^.*.\u anon.*.$”;
如果调用include/exclude方法,则必须处理Jetty执行的特定处理序列,这可能会造成混淆。因此,我建议您首先对空数组使用setter方法,以便清除Jetty默认设置的任何内容,然后添加首选项。例如:
//清空集合,我们不需要教育
setExcludeProtocols(新字符串[]{});
setExcludeCipherSuite(新字符串[]{});
//告诉我你想要什么,你真正想要什么
setIncludeProtocols(“TLSv1”、“TLSv1.1”、“TLSv1.2”);
sslContextFactory.setIncludeCipherSuites(OMGiveNeverseensucchabigarayofiPhone);
如果需要特定Java客户端支持的密码列表,使用
-Djavax.net.debug=ssl:handshake:verbose运行该客户端,并查找ClientHello消息。您需要知道哪些内容尚未显示?如果我未在包含/排除的协议中使用它,它不会显示可用的协议,如TLSv1.2
。我不理解“如果我不使用它…”开头的部分。I可以使用:sslContextFactory.setExcludeCipherSuites(新字符串[]{“TLS\u DHE\u RSA\u WITH_3DES\u EDE\u CBC\u SHA”…)
然后我在日志中看到TLS\u DHE\u RSA\u WITH_3DES\u EDE\u CBC\u SHA
。但如果我不排除它,即使它可用并且可以被客户端使用,我也不会在日志中看到它。请尝试选择ciphersuites()。