JDK 版本支持的 SSL/TLS 版本

编辑

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

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

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

请查看安全提供程序的发行说明以获取有关 TLS 支持的信息。

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

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

尽管 Elasticsearch 支持在较旧的 JDK8 版本上运行而无需 TLS v1.3,但我们建议您升级到包含 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 的默认配置文件中的 jdk.tls.disabledAlgorithms 设置复制到 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 版本,则该版本将被静默忽略。

类似地,除非将 JDK 中启用的 TLS 版本配置为 Elasticsearch 中的 ssl.supported_protocols 之一,否则不会使用它。