跳转到主要内容

TLS 支持

常规配置

属性描述默认值
druid.enablePlaintextPort启用/禁用 HTTP 连接器。true
druid.enableTlsPort启用/禁用 HTTPS 连接器。false

虽然不建议,但 HTTP 和 HTTPS 连接器可以同时启用。各自的端口可以使用每个进程上的 druid.plaintextPortdruid.tlsPort 属性进行配置。请参阅各进程的“配置”部分,以检查这些端口的有效值和默认值。

Jetty 服务器配置

Apache Druid 使用 Jetty 作为其嵌入式 Web 服务器。

要熟悉 TLS/SSL 以及密钥和证书等相关概念,请阅读 Jetty 文档中的 配置安全协议。要深入了解 Java 中 TLS/SSL 的通用支持,请参考 Java 安全套接字扩展 (JSSE) 参考指南SslContextFactory 类参考文档有助于理解下列 TLS/SSL 配置。最后,JDK 17 的 Java 加密架构标准算法名称文档列出了下方配置的所有可能值,以及 Java 实现提供的其他值。

属性描述默认值是否必须
druid.server.https.keyStorePathTLS/SSL 密钥库的文件路径或 URL。
druid.server.https.keyStoreType密钥库的类型。
druid.server.https.certAlias连接器所用的 TLS/SSL 证书别名。
druid.server.https.keyStorePassword密钥库的 密码提供程序 或字符串密码。
druid.server.https.reloadSslContextDruid 服务器是否应检测密钥库文件的更改并重新加载。false
druid.server.https.reloadSslContextSecondsDruid 服务器扫描密钥库文件更改的频率。60
druid.server.https.forceApplyConfig即使现有的 SslContextFactory.Server 实例已绑定,是否仍应用 TLS 服务器配置。false

下表包含与客户端证书身份验证相关的配置选项。

属性描述默认值是否必须
druid.server.https.requireClientCertificate如果设置为 true,客户端必须通过提供 TLS 证书来验证自身身份,否则连接将失败。false
druid.server.https.requestClientCertificate如果设置为 true,客户端可以根据需要选择通过提供 TLS 证书来验证自身身份。如果不提供 TLS 证书,连接不会失败。如果 requireClientCertificate 设置为 true,则忽略此属性。如果 requireClientCertificaterequestClientCertificate 均为 false,则忽略此表中的其余选项。false
druid.server.https.trustStoreType包含用于验证客户端证书的证书的信任库类型。如果 requireClientCertificaterequestClientCertificate 均为 false,则不需要此项。java.security.KeyStore.getDefaultType()
druid.server.https.trustStorePath包含用于验证客户端证书的证书的信任库文件路径或 URL。如果 requireClientCertificaterequestClientCertificate 均为 false,则不需要此项。是,仅当 requireClientCertificate 为 true 时
druid.server.https.trustStoreAlgorithmTrustManager 用于验证客户端证书链的算法。如果 requireClientCertificaterequestClientCertificate 均为 false,则不需要此项。javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()
druid.server.https.trustStorePassword信任库的 密码提供程序 或字符串密码。如果 requireClientCertificaterequestClientCertificate 均为 false,则不需要此项。
druid.server.https.validateHostnames如果设置为 true,则检查客户端主机名是否与客户端证书中的 CN/subjectAltNames 匹配。如果 requireClientCertificaterequestClientCertificate 均为 false,则不使用此项。true
druid.server.https.crlPath指定包含静态 证书吊销列表 的文件路径,用于检查客户端证书是否已被吊销。如果 requireClientCertificaterequestClientCertificate 均为 false,则不使用此项。null

下表包含非强制性的高级配置选项,请谨慎使用。

属性描述默认值是否必须
druid.server.https.keyManagerFactoryAlgorithm用于创建 KeyManager 的算法,更多详细信息请见 此处javax.net.ssl.KeyManagerFactory.getDefaultAlgorithm()
druid.server.https.keyManagerPasswordKey Manager 的 密码提供程序 或字符串密码。
druid.server.https.includeCipherSuites要包含的密码套件名称列表。可以使用确切的密码套件名称或正则表达式。Jetty 默认包含的密码列表
druid.server.https.excludeCipherSuites要排除的密码套件名称列表。可以使用确切的密码套件名称或正则表达式。Jetty 默认排除的密码列表
druid.server.https.includeProtocols要包含的确切协议名称列表。Jetty 默认包含的协议列表
druid.server.https.excludeProtocols要排除的确切协议名称列表。Jetty 默认排除的协议列表

通过 TLS 进行内部通信

只要可能,Druid 进程就会使用 HTTPS 进行相互通信。为了启用此通信,需要为 Druid 的 HttpClient 配置一个能够验证服务器证书的正确 SSLContext,否则通信将失败。

由于配置 SSLContext 的方式多种多样,默认情况下,Druid 在创建 HttpClient 时会查找 SSLContext Guice 绑定实例。此绑定可以通过编写 Druid 扩展 来实现,该扩展可以提供 SSLContext 的实例。Druid 附带了一个简单的扩展,可在此处找到 此处,这对于大多数简单情况应该足够有用;请参阅 此处 了解如何包含扩展。如果此扩展不能满足要求,请遵循该扩展的 实现 来创建您自己的扩展。

当 Druid Coordinator/Overlord 同时启用了 HTTP 和 HTTPS,且客户端向非 Leader 进程发送请求时,客户端总是被重定向到 Leader 进程上的 HTTPS 端点。因此,应首先升级客户端以使其能够处理到 HTTPS 的重定向。然后应升级 Druid Overlord/Coordinator 并配置为同时运行 HTTP 和 HTTPS 端口。之后应更改客户端配置,使其通过 HTTPS 端点引用 Druid Coordinator/Overlord,最后禁用 Druid Coordinator/Overlord 上的 HTTP 端口。

自定义证书检查

Druid 支持自定义证书检查扩展。有关需要实现的方法的详细信息,请参阅 org.apache.druid.server.security.TLSCertificateChecker 接口。

要使用自定义 TLS 证书检查器,请指定以下属性

属性描述默认值是否必须
druid.tls.certificateChecker由扩展提供的自定义 TLS 证书检查器的类型名称。请参阅扩展文档以获取应指定的类型名称。"default"

默认检查器委托给标准信任管理器,不执行任何额外的操作或检查。

如果使用非默认证书检查器,请参阅扩展文档以获取所需的其他配置属性。