bin/kc.[sh|bat] start --https-certificate-file=/path/to/certfile.pem --https-certificate-key-file=/path/to/keyfile.pem
传输层安全性 (简称:TLS) 对于通过安全通道交换数据至关重要。对于生产环境,您永远不应该通过 HTTP 公开 Keycloak 端点,因为敏感数据是 Keycloak 与其他应用程序交换的核心内容。在本指南中,您将学习如何配置 Keycloak 使用 HTTPS/TLS。
Keycloak 可以配置为使用 PEM 格式的文件或来自 Java 密钥库加载所需的证书基础设施。当两种备选方案都配置时,PEM 文件优先于 Java 密钥库。
当您使用 PEM 格式的一对匹配的证书和私钥文件时,您可以通过运行以下命令配置 Keycloak 使用它们
bin/kc.[sh|bat] start --https-certificate-file=/path/to/certfile.pem --https-certificate-key-file=/path/to/keyfile.pem
Keycloak 会从这些文件在内存中创建一个密钥库,并在之后使用此密钥库。
当没有显式配置密钥库文件,但 http-enabled
设置为 false 时,Keycloak 会查找 conf/server.keystore
文件。
或者,您可以通过运行以下命令使用现有密钥库
bin/kc.[sh|bat] start --https-key-store-file=/path/to/existing-keystore-file
您可以使用 https-key-store-password
选项为您的密钥库设置安全密码
bin/kc.[sh|bat] start --https-key-store-password=<value>
如果没有设置密码,则使用默认密码 password
。
避免使用 CLI 或将其添加到 conf/keycloak.conf
文件中以明文设置密码。相反,请使用良好做法,例如使用保险库/挂载的秘密。有关更多详细信息,请参阅 使用保险库 和 为生产配置 Keycloak。
默认情况下,Keycloak 不会启用已弃用的 TLS 协议。如果您的客户端仅支持已弃用的协议,请考虑升级客户端。但是,作为临时解决方法,您可以通过运行以下命令启用已弃用的协议
bin/kc.[sh|bat] start --https-protocols=<protocol>[,<protocol>]
要允许 TLSv1.2,请使用以下命令:kc.sh start --https-protocols=TLSv1.3,TLSv1.2
。
Keycloak 在端口 8443
上侦听 HTTPS 流量。要更改此端口,请使用以下命令
bin/kc.[sh|bat] start --https-port=<port>
默认情况下,Keycloak 会每小时重新加载在 https-*
选项中指定的证书、密钥和密钥库。对于服务器密钥可能需要频繁轮换的环境,这允许在不重新启动服务器的情况下实现轮换。您可以通过 https-certificates-reload-period
选项覆盖默认值。重新加载由 https-*
选项引用的密钥库、信任库和证书文件的间隔。该值可以是 java.time.Duration 值、一个整数秒数,或者一个整数后跟一个时间单位 [ms
、h
、m
、s
、d
]。必须大于 30 秒。使用 -1
禁用。
值 | |
---|---|
|
|
|
|
|
|
|
(默认) |
|
|
|
|
|
(默认) |
|
|
|
(默认) |
|
(默认) |
|
|
|
|
|
|
|
(默认) |