JDK 版本支持的 SSL/TLS 版本
编辑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 中使用它。
- 找到您的 JDK 的配置文件。
- 从该文件中复制
jdk.tls.disabledAlgorithms
设置,并将其添加到 Elasticsearch 配置目录中的自定义配置文件中。 - 在自定义配置文件中,从
jdk.tls.disabledAlgorithms
中删除您要使用的 TLS 版本的值。 - 配置 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 中启用,也不会使用它。