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

时间:2016-05-27 12:22:10

标签: java ssl encryption jetty spark-java

我想禁用SSL实验室认为很弱的密码套件(下面的列表),以便在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),Java 8.

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

有专门知识的人能否解释一下该做什么? 谢谢。

1 个答案:

答案 0 :(得分:1)

假设您在没有任何其他安全提供程序的情况下使用Sun JVM,那么Spark正在使用JVM的Sun安全提供程序进行SSL / TLS - JSSE。您可以通过修改位于jre/lib/security/java.security的{​​{3}}来停用特定算法。

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

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级别禁用密码套件 - 您还可以JSSE's configuration file。这可以使用configure this within Jetty在代码中完成。

它也可以用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 SslContext.setExcludeCipherSuites(java.lang.String…​) - 这意味着除非您按照问题评论中的讨论手动实例化Jetty,否则这种方法无效。