嵌入式Jetty服务器中的TLSv1支持

时间:2018-09-29 05:34:42

标签: java ssl embedded-jetty

我正在运行启用了https / TLS的嵌入式Jetty服务器。它与所有现代浏览器(TLSv1.2)完美配合。
我们有一个旧版浏览器(无法更改/检查其代码的.exe),我们正尝试通过https将其连接到Jetty服务器,这是失败的。
我在码头调试了SSL,并得知该浏览器正在使用TLSv1进行连接,因此我执行了以下操作:

sslContextFactory.setIncludeProtocols( "TLSv1");

在此之后,我开始在服务器端收到错误消息“没有密码适合的地方”。要通过此操作(我知道这是危险动物,但目前仍然如此),我做到了:

sslContextFactory.setExcludeCipherSuites();

这样做之后,我在服务器端没有看到任何错误,但是旧版浏览器仍然无法连接。 (它可以以Facebook,Google身份连接到其他https网站)。
上述更改后的服务器端日志:

WRITE: TLSv1 Handshake, length = 48
called closeOutbound()
closeOutboundInternal()
SEND TLSv1 ALERT: 
warning,
close_notify
WRITE: TLSv1 Alert, length = 32

任何想法在这里可能出什么问题吗?我尝试对其进行大量搜索,但无法完成。我也尝试在服务器上启用SNI,但是没有运气。
任何帮助将不胜感激。
谢谢

edit1
如果将Jetty SSL日志与工作请求进行比较,则会看到以下差异。工作请求也在发送应用程序数据,如下所示:

WRITE: TLSv1 Application Data, length = 1285

在不工作的请求中,我在下面看到另外一行(TLS_RSA_WITH_AES_128_CBC_SHA是密码套件名称):

Cached server session: [Session-1, TLS_RSA_WITH_AES_128_CBC_SHA]

1 个答案:

答案 0 :(得分:0)

Jetty 9.4出现问题。*
https://github.com/eclipse/jetty.project/issues/3773
https://github.com/eclipse/jetty.project/issues/2807
盲目地排除了TLS1.0和TLS1.1。
修复
如上所述构造SslContextFactory后,是(a)调用setExcludeCipherSuites()
或(b)仅覆盖SslContextFactory.setExcludeCipherSuites(final String... cipherSuites)而不执行任何操作,如下所示:

final SslContextFactory sslContextFactory = new SslContextFactory()
    {
        @Override
        public void setExcludeCipherSuites(final String... cipherSuites)
        {
            // do nothing intentionally.
        }
    };