首页 > 解决方案 > 升级后的 Jetty SSL 问题 - 未知协议

问题描述

我将 Jetty 9.3.6 升级到 Jetty 9.4.27,但 SSL 连接出现问题。

当我在某些受支持的操作上运行 curl 时,我得到 error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (error 35)了,而当我在运行 Jetty 9.3.6 的服务器上运行相同的命令时,一切正常。

我以与旧版本相同的方式配置了 jetty 的新版本(包括密钥库路径和启用 https 支持)。您是否知道升级过程中可能出了什么问题或我可能错过了什么?

非常感谢您的支持。

标签: sslhttpsjettyjetty-9

解决方案


Jetty 9.3.x 和 9.4.x 具有不同的 Cipher Suite 排除项。

码头 9.3.6.v20151106 看起来像这样......

https://github.com/eclipse/jetty.project/blob/jetty-9.3.6.v20151106/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java#L248- L260

        addExcludeProtocols("SSL", "SSLv2", "SSLv2Hello", "SSLv3");
        setExcludeCipherSuites(
                "SSL_RSA_WITH_DES_CBC_SHA",
                "SSL_DHE_RSA_WITH_DES_CBC_SHA",
                "SSL_DHE_DSS_WITH_DES_CBC_SHA",
                "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
                "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
                "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
                "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA");

码头 9.4.29.v20200521 看起来像这样......

https://github.com/eclipse/jetty.project/blob/jetty-9.4.29.v20200521/jetty-util/src/main/java/org/eclipse/jetty/util/ssl/SslContextFactory.java#L119- L138

    /**
     * Default Excluded Protocols List
     */
    private static final String[] DEFAULT_EXCLUDED_PROTOCOLS = {"SSL", "SSLv2", "SSLv2Hello", "SSLv3"};
    /**
     * Default Excluded Cipher Suite List
     */
    private static final String[] DEFAULT_EXCLUDED_CIPHER_SUITES = {
        // Exclude weak / insecure ciphers
        "^.*_(MD5|SHA|SHA1)$",
        // Exclude ciphers that don't support forward secrecy
        "^TLS_RSA_.*$",
        // The following exclusions are present to cleanup known bad cipher
        // suites that may be accidentally included via include patterns.
        // The default enabled cipher list in Java will not include these
        // (but they are available in the supported list).
        "^SSL_.*$",
        "^.*_NULL_.*$",
        "^.*_anon_.*$"
    };

您需要评估为什么需要已知易受攻击的密码套件才能运行。

此外,如果您使用的是 IBM JVM,则所有赌注都没有,因为 IBM 使用非标准密码套件名称(与所有其他使用 RFC 注册密码套件名称的 JVM 不同)。


推荐阅读