我想禁用 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 没有外部配置文件,文档中也没有提及如何正确执行此操作而不把事情搞砸。
有专业知识的人可以准确解释一下该怎么做吗?
谢谢。
最佳答案
假设您使用的 Sun JVM 没有任何其他安全提供程序,则 Spark 将使用 JVM 的 Sun 安全提供程序来实现 SSL/TLS - JSSE。您可以通过修改JSSE's configuration file来禁用特定算法位于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 。这可以使用 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,否则此方法无法工作。
关于java - 在 Spark 内的 Jetty 服务器上禁用密码套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37483482/