JDK 版本支持的 SSL/TLS 版本

编辑

Elasticsearch 依赖于您的 JDK 对 SSL 和 TLS 的实现。

不同的 JDK 版本支持不同的 SSL 版本,这可能会影响 Elasticsearch 的运行方式。

当在 JDK 中使用默认 JSSE 提供程序运行时,此支持适用。配置为使用 FIPS 140-2 安全提供程序的 JVM 可能具有自定义的 TLS 实现,该实现可能支持与此列表不同的 TLS 协议版本。

请查看您的安全提供商的发行说明,了解有关 TLS 支持的信息。

SSLv3
所有 Elasticsearch 兼容的 JDK 都支持 SSL v3,但默认情况下禁用。请参阅在您的 JDK 上启用其他 SSL/TLS 版本
TLSv1
所有 Elasticsearch 兼容的 JDK 都支持 TLS v1.0。一些较新的 JDK,包括与 Elasticsearch 捆绑的 JDK,默认情况下禁用 TLS v1.0。请参阅在您的 JDK 上启用其他 SSL/TLS 版本
TLSv1.1
所有 Elasticsearch 兼容的 JDK 都支持 TLS v1.1。一些较新的 JDK,包括与 Elasticsearch 捆绑的 JDK,默认情况下禁用 TLS v1.1。请参阅在您的 JDK 上启用其他 SSL/TLS 版本
TLSv1.2
所有 Elasticsearch 兼容的 JDK 都支持 TLS v1.2。它在 Elasticsearch 支持的所有 JDK 上默认启用,包括捆绑的 JDK。
TLSv1.3

JDK11 及更高版本以及 JDK8 版本高于 8u261(包括 Elasticsearch 支持的每个 JDK8 发行版的最新版本)都支持 TLS v1.3。与 Elasticsearch 捆绑的 JDK 默认支持并启用 TLS v1.3。

尽管 Elasticsearch 支持在没有 TLS v1.3 的旧 JDK8 版本上运行,但我们建议升级到包含 TLS v1.3 的 JDK 版本,以获得更好的支持和更新。

在您的 JDK 上启用其他 SSL/TLS 版本

编辑

JDK 支持的 SSL/TLS 版本集由作为 JDK 一部分安装的 Java 安全属性文件控制。

此配置文件列出了在该 JDK 中禁用的 SSL/TLS 算法。完成以下步骤,从该列表中删除 TLS 版本并在您的 JDK 中使用它。

  1. 找到您的 JDK 的配置文件。
  2. 从该文件中复制 jdk.tls.disabledAlgorithms 设置,并将其添加到 Elasticsearch 配置目录中的自定义配置文件中。
  3. 在自定义配置文件中,从 jdk.tls.disabledAlgorithms 中删除您要使用的 TLS 版本的值。
  4. 配置 Elasticsearch 以将自定义系统属性传递给 JDK,以便使用您的自定义配置文件。

找到您的 JDK 的配置文件

编辑

对于 Elasticsearch 捆绑的 JDK,配置文件位于 Elasticsearch 主目录 ($ES_HOME) 的子目录中

  • Linux:$ES_HOME/jdk/conf/security/java.security
  • Windows:$ES_HOME/jdk/conf/security/java.security
  • macOS:$ES_HOME/jdk.app/Contents/Home/conf/security/java.security

对于 JDK8,配置文件位于 Java 安装的 jre/lib/security 目录中。如果 $JAVA_HOME 指向您用于运行 Elasticsearch 的 JDK 的主目录,则配置文件将位于

  • $JAVA_HOME/jre/lib/security/java.security

对于 JDK11 或更高版本,配置文件位于 Java 安装的 conf/security 目录中。如果 $JAVA_HOME 指向您用于运行 Elasticsearch 的 JDK 的主目录,则配置文件将位于

  • $JAVA_HOME/conf/security/java.security

复制 disabledAlgorithms 设置

编辑

在 JDK 配置文件中,有一行以 jdk.tls.disabledAlgorithms= 开头。此设置控制在您的 JDK 中禁用哪些协议和算法。该设置的值通常会跨越多行。

例如,在 OpenJDK 16 中,设置如下

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

在您的 Elasticsearch 配置目录中创建一个名为 es.java.security 的新文件。将 jdk.tls.disabledAlgorithms 设置从 JDK 的默认配置文件复制到 es.java.security 中。您不需要复制任何其他设置。

启用所需的 TLS 版本

编辑

编辑 Elasticsearch 配置目录中的 es.java.security 文件,并修改 jdk.tls.disabledAlgorithms 设置,以便不再列出您希望使用的任何 SSL 或 TLS 版本。

例如,要在 OpenJDK 16 上启用 TLSv1.1(它使用先前显示的 jdk.tls.disabledAlgorithms 设置),es.java.security 文件将包含先前禁用的 TLS 算法,除了 TLSv1.1

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

启用您的自定义安全配置

编辑

要启用您的自定义安全策略,请在 Elasticsearch 配置目录中的 jvm.options.d 目录中添加一个文件。

要启用您的自定义安全策略,请在 Elasticsearch 配置目录的 jvm.options.d 目录中创建一个名为 java.security.options 的文件,其中包含以下内容

-Djava.security.properties=/path/to/your/es.java.security

在 Elasticsearch 中启用 TLS 版本

编辑

可以通过 ssl.supported_protocols 设置在 Elasticsearch 中启用和禁用 SSL/TLS 版本。

Elasticsearch 将仅支持 底层 JDK 启用的 TLS 版本。如果您配置 ssl.supported_procotols 以包含 JDK 中未启用的 TLS 版本,则它将被静默忽略。

同样,除非将 TLS 版本配置为 Elasticsearch 中的 ssl.supported_protocols 之一,否则即使在您的 JDK 中启用,也不会使用它。