在 Spark 中的 Jetty 服务器上禁用密码套件

Disable cipher suites on Jetty server within Spark

我想禁用 SSL Labs 认为较弱的密码套件(下面列出)以通过 SparkJava 服务器上的 SSL 测试。

要禁用的密码:
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA

Spark版本spark-core 2.5(包括Jetty 9.3),Java8.

Spark 没有外部配置文件,文档中也没有提及如何正确执行此操作而不会搞砸。

有知识的人能具体解释一下该怎么做吗?
谢谢。

假设您使用的是 Sun JVM 而没有任何额外的安全提供程序,那么 Spark 将 JVM 的 Sun 安全提供程序用于 SSL/TLS - JSSE。您可以通过修改位于 jre/lib/security/java.security.

JSSE's configuration file 来禁用特定算法

具体来说,你可以这样做:

jdk.tls.disabledAlgorithms=SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256

上面描述了如何在 Java VM 级别禁用密码套件 - 您也可以 configure this within Jetty. This can be done in code using SslContext.setExcludeCipherSuites(java.lang.String…​).

也可以在XML中配置。新建一个配置文件${jetty.base}/etc/disable-ciphers.xml(可以任意命名,只要不以jetty-开头即可)

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
      "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
  <Call name="addExcludeCipherSuites">
    <Arg>
      <Array type="String">
        <Item>TLS_DHE_RSA_WITH_AES_128_.*$/Item>
        <Item>SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA</Item>
      </Array>
    </Arg>
  </Call>
</Configure>

最后,你需要把这个文件告诉Jetty,所以修改${jetty.base}/start.ini,在文件尾部添加对disable-ciphers.xml的相对路径引用。

但是,Spark 不允许配置 Jetty - 请参阅 Github #314 - 这意味着除非您按照问题评论中的讨论手动实例化 Jetty,否则此方法无法工作。