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 及更高版本以及高于 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 中使用它。
- 找到您的 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 默认配置文件中的 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 版本。