TLS 支持
常规配置
| 属性 | 描述 | 默认值 |
|---|---|---|
druid.enablePlaintextPort | 启用/禁用 HTTP 连接器。 | true |
druid.enableTlsPort | 启用/禁用 HTTPS 连接器。 | false |
虽然不建议,但 HTTP 和 HTTPS 连接器可以同时启用。各自的端口可以使用每个进程上的 druid.plaintextPort 和 druid.tlsPort 属性进行配置。请参阅各进程的“配置”部分,以检查这些端口的有效值和默认值。
Jetty 服务器配置
Apache Druid 使用 Jetty 作为其嵌入式 Web 服务器。
要熟悉 TLS/SSL 以及密钥和证书等相关概念,请阅读 Jetty 文档中的 配置安全协议。要深入了解 Java 中 TLS/SSL 的通用支持,请参考 Java 安全套接字扩展 (JSSE) 参考指南。SslContextFactory 类参考文档有助于理解下列 TLS/SSL 配置。最后,JDK 17 的 Java 加密架构标准算法名称文档列出了下方配置的所有可能值,以及 Java 实现提供的其他值。
| 属性 | 描述 | 默认值 | 是否必须 |
|---|---|---|---|
druid.server.https.keyStorePath | TLS/SSL 密钥库的文件路径或 URL。 | 无 | 是 |
druid.server.https.keyStoreType | 密钥库的类型。 | 无 | 是 |
druid.server.https.certAlias | 连接器所用的 TLS/SSL 证书别名。 | 无 | 是 |
druid.server.https.keyStorePassword | 密钥库的 密码提供程序 或字符串密码。 | 无 | 是 |
druid.server.https.reloadSslContext | Druid 服务器是否应检测密钥库文件的更改并重新加载。 | false | 否 |
druid.server.https.reloadSslContextSeconds | Druid 服务器扫描密钥库文件更改的频率。 | 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,则忽略此属性。如果 requireClientCertificate 和 requestClientCertificate 均为 false,则忽略此表中的其余选项。 | false | 否 |
druid.server.https.trustStoreType | 包含用于验证客户端证书的证书的信任库类型。如果 requireClientCertificate 和 requestClientCertificate 均为 false,则不需要此项。 | java.security.KeyStore.getDefaultType() | 否 |
druid.server.https.trustStorePath | 包含用于验证客户端证书的证书的信任库文件路径或 URL。如果 requireClientCertificate 和 requestClientCertificate 均为 false,则不需要此项。 | 无 | 是,仅当 requireClientCertificate 为 true 时 |
druid.server.https.trustStoreAlgorithm | TrustManager 用于验证客户端证书链的算法。如果 requireClientCertificate 和 requestClientCertificate 均为 false,则不需要此项。 | javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm() | 否 |
druid.server.https.trustStorePassword | 信任库的 密码提供程序 或字符串密码。如果 requireClientCertificate 和 requestClientCertificate 均为 false,则不需要此项。 | 无 | 否 |
druid.server.https.validateHostnames | 如果设置为 true,则检查客户端主机名是否与客户端证书中的 CN/subjectAltNames 匹配。如果 requireClientCertificate 和 requestClientCertificate 均为 false,则不使用此项。 | true | 否 |
druid.server.https.crlPath | 指定包含静态 证书吊销列表 的文件路径,用于检查客户端证书是否已被吊销。如果 requireClientCertificate 和 requestClientCertificate 均为 false,则不使用此项。 | null | 否 |
下表包含非强制性的高级配置选项,请谨慎使用。
| 属性 | 描述 | 默认值 | 是否必须 |
|---|---|---|---|
druid.server.https.keyManagerFactoryAlgorithm | 用于创建 KeyManager 的算法,更多详细信息请见 此处。 | javax.net.ssl.KeyManagerFactory.getDefaultAlgorithm() | 否 |
druid.server.https.keyManagerPassword | Key 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" | 否 |
默认检查器委托给标准信任管理器,不执行任何额外的操作或检查。
如果使用非默认证书检查器,请参阅扩展文档以获取所需的其他配置属性。