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 及更高版本以及高于 8u261 的 JDK8 版本(包括 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 默认配置文件中的 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 版本,则该版本将被静默忽略。

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