設定 TLS

了解如何為 Keycloak 的傳入和傳出請求設定 HTTPS 憑證。

傳輸層安全性(簡稱 TLS)對於透過安全通道交換資料至關重要。對於生產環境,您絕不應透過 HTTP 公開 Keycloak 端點,因為敏感資料是 Keycloak 與其他應用程式交換的核心。在本指南中,您將學習如何設定 Keycloak 以使用 HTTPS/TLS。

可以設定 Keycloak 以使用 PEM 格式的檔案或 Java Keystore 載入所需的憑證基礎架構。當兩種替代方案都設定時,PEM 檔案的優先順序高於 Java Keystore。

以 PEM 格式提供憑證

當您使用一對匹配的憑證和 PEM 格式的私鑰檔案時,您可以使用以下命令設定 Keycloak 使用它們

bin/kc.[sh|bat] start --https-certificate-file=/path/to/certfile.pem --https-certificate-key-file=/path/to/keyfile.pem

Keycloak 會從這些檔案在記憶體中建立一個金鑰儲存庫,並在之後使用這個金鑰儲存庫。

提供 Java Keystore

當沒有明確設定金鑰儲存庫檔案,但 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 用於生產環境

設定 TLS 協定

預設情況下,Keycloak 不會啟用已棄用的 TLS 協定。如果您的用戶端僅支援已棄用的協定,請考慮升級用戶端。但是,作為臨時的解決方案,您可以透過執行以下命令啟用已棄用的協定

bin/kc.[sh|bat] start --https-protocols=<protocol>[,<protocol>]

若也要允許 TLSv1.2,請使用如下的命令:kc.sh start --https-protocols=TLSv1.3,TLSv1.2

切換 HTTPS 連接埠

Keycloak 在連接埠 8443 上監聽 HTTPS 流量。若要變更此連接埠,請使用以下命令

bin/kc.[sh|bat] start --https-port=<port>

憑證和金鑰重新載入

預設情況下,Keycloak 會每小時重新載入在 https-* 選項中指定的憑證、金鑰和金鑰儲存庫。對於伺服器金鑰可能需要頻繁輪換的環境,這允許在不重新啟動伺服器的情況下發生。您可以使用 https-certificates-reload-period 選項覆寫預設值。重新載入 https-* 選項引用的金鑰儲存庫、信任儲存庫和憑證檔案的時間間隔。該值可以是 java.time.Duration 值、整數秒數或整數後跟一個時間單位 [mshmsd]。必須大於 30 秒。使用 -1 停用。

相關選項

http-enabled

啟用 HTTP 接聽器。

CLI: --http-enabled
Env: KC_HTTP_ENABLED

truefalse(預設)

https-certificate-file

PEM 格式的伺服器憑證或憑證鏈的檔案路徑。

CLI: --https-certificate-file
Env: KC_HTTPS_CERTIFICATE_FILE

https-certificate-key-file

PEM 格式的私鑰的檔案路徑。

CLI: --https-certificate-key-file
Env: KC_HTTPS_CERTIFICATE_KEY_FILE

https-certificates-reload-period

重新載入 https-* 選項引用的金鑰儲存庫、信任儲存庫和憑證檔案的時間間隔。

可以是 java.time.Duration 值、整數秒數或整數後跟 [ms、h、m、s、d] 其中一個。必須大於 30 秒。使用 -1 停用。

CLI: --https-certificates-reload-period
Env: KC_HTTPS_CERTIFICATES_RELOAD_PERIOD

1h(預設)

https-cipher-suites

要使用的密碼套件。

如果未指定,則會選擇合理的預設值。

CLI: --https-cipher-suites
Env: KC_HTTPS_CIPHER_SUITES

https-key-store-file

保存憑證資訊的金鑰儲存庫,而不是指定單獨的檔案。

CLI: --https-key-store-file
Env: KC_HTTPS_KEY_STORE_FILE

https-key-store-password

金鑰儲存庫檔案的密碼。

CLI: --https-key-store-password
Env: KC_HTTPS_KEY_STORE_PASSWORD

password(預設)

https-key-store-type

金鑰儲存庫檔案的類型。

如果未給定,則會根據副檔名自動偵測類型。如果 fips-mode 設定為 strict 且未設定值,則預設為 BCFKS

CLI: --https-key-store-type
Env: KC_HTTPS_KEY_STORE_TYPE

https-port

使用的 HTTPS 連接埠。

CLI: --https-port
Env: KC_HTTPS_PORT

8443(預設)

https-protocols

要明確啟用的協定清單。

CLI: --https-protocols
Env: KC_HTTPS_PROTOCOLS

[TLSv1.3,TLSv1.2](預設)

https-management-certificate-file

管理伺服器 PEM 格式的伺服器憑證或憑證鏈的檔案路徑。

如果未給定,則該值會繼承自 HTTP 選項。僅在管理介面上公開某些內容時才相關 - 請參閱指南以了解詳細資訊。

CLI: --https-management-certificate-file
Env: KC_HTTPS_MANAGEMENT_CERTIFICATE_FILE

https-management-certificate-key-file

管理伺服器 PEM 格式的私鑰的檔案路徑。

如果未給定,則該值會繼承自 HTTP 選項。僅在管理介面上公開某些內容時才相關 - 請參閱指南以了解詳細資訊。

CLI: --https-management-certificate-key-file
Env: KC_HTTPS_MANAGEMENT_CERTIFICATE_KEY_FILE

https-management-key-store-file

保存憑證資訊的金鑰儲存庫,而不是指定管理伺服器的單獨檔案。

如果未給定,則該值會繼承自 HTTP 選項。僅在管理介面上公開某些內容時才相關 - 請參閱指南以了解詳細資訊。

CLI: --https-management-key-store-file
Env: KC_HTTPS_MANAGEMENT_KEY_STORE_FILE

https-management-key-store-password

管理伺服器金鑰儲存庫檔案的密碼。

如果未給定,則該值會繼承自 HTTP 選項。僅在管理介面上公開某些內容時才相關 - 請參閱指南以了解詳細資訊。

CLI: --https-management-key-store-password
Env: KC_HTTPS_MANAGEMENT_KEY_STORE_PASSWORD

password(預設)

本頁內容