java - 在 Spark 内的 Jetty 服务器上禁用密码套件

标签 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 没有外部配置文件,文档中也没有提及如何正确执行此操作而不把事情搞砸。

有专业知识的人可以准确解释一下该怎么做吗?
谢谢。

最佳答案

假设您使用的 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/

相关文章:

azure - Powershell Azure : Could not create SSL/TLS secure channel

html - 离线安全 HTML 5 应用程序

java - 使用 Android 实现 Bouncy CaSTLe 密码算法

java - 在不同的jvm实例中序列化和反序列化对象

java - IBM WEME J9 无效填充异常

java - 对使用多态性遍历类层次结构感到困惑

ssl - 无法将文件上传到远程 ftps 服务器

Python 2凯撒密码

java - 如何在继续之前等待startup()中的归因完成?

java - 如何解析未知类并且无法解析 Android Studio java 库模块中的符号