10.4. 保护传输堆栈
默认情况下,使用基于 TCP 的传输堆栈启用使用 TLS 的加密,只要您使用基于 TCP 的传输堆栈,就不需要默认配置不需要对缓存 XML 的修改。
如果您使用基于 UDP
或 TCP_NIO2
的传输堆栈,请按如下所示配置传输堆栈的加密:
-
将选项
cache-embedded-mtls-enabled
设置为false
。 - 按照 JGroups 加密文档中的文档和 加密集群传输。
启用 TLS 后,红帽构建的 Keycloak 会自动生成自签名 RSA 2048 位证书来保护连接,并使用 TLS 1.3 来保护通信。密钥和证书存储在数据库中,以便它们可供所有节点使用。默认情况下,证书在 60 天内有效,并在运行时每 30 天进行轮转。使用选项 cache-embedded-mtls-rotation-interval-days
来更改它。
10.4.1. 在服务网格内运行
当使用类似 Istio 的服务网格时,您可能需要允许红帽构建的 Keycloak Pod 之间的直接 mTLS 通信,以允许 mutual 身份验证正常工作。否则,您可能会看到 JGRP000006: failed accept connection from peer SSLSocket
(表示显示错误的证书),集群将无法正确表单。
然后,您可以选择允许红帽构建的 Keycloak Pod 之间的 mTLS 通信,或者依赖服务网格传输安全性来加密通信并验证对等点。
在使用 Istio 时,为红帽构建的 Keycloak 允许直接 mTLS 通信:
应用以下配置以允许直接连接。
apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: infinispan-allow-nomtls spec: selector: matchLabels: app: keycloak portLevelMtls: "7800": mode: PERMISSIVE
apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: infinispan-allow-nomtls spec: selector: matchLabels: app: keycloak
1 portLevelMtls: "7800":
2 mode: PERMISSIVE
Copy to Clipboard Copied!
另外,要禁用 mTLS 通信,并依赖服务网格来加密流量:
-
将选项
cache-embedded-mtls-enabled
设置为false
。 - 将您的服务网格配置为仅授权来自其他红帽构建的 Keycloak Pod 的流量进行数据传输端口(默认为 7800)。
10.4.2. 提供自己的密钥和证书
虽然不建议标准设置,但在特定设置中至关重要,您可以使用传输堆栈的证书手动配置密钥存储。cache-embedded-mtls-key-store-file
设置密钥存储的路径,而 cache-embedded-mtls-key-store-password
会设置密码来解密它。truststore 包含用来接受连接的有效证书,它可以使用 cache-embedded-mtls-trust-store-file
(信任存储的路径)和 cache-embedded-mtls-trust-store-password
(解密它的密码)。要限制未授权的访问,请始终为每个红帽构建的 Keycloak 部署使用自签名证书。