在 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,否则此方法无法工作。
我想禁用 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
.
具体来说,你可以这样做:
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,否则此方法无法工作。