設定信任憑證

如何設定 Keycloak 信任儲存區以透過 TLS 通訊。

當 Keycloak 與外部服務通訊或有透過 TLS 的連入連線時,它必須驗證遠端憑證,以確保它連線到受信任的伺服器。這對於防止中間人攻擊是必要的。

這些客戶端或伺服器的憑證,或簽署這些憑證的 CA,必須放入信任儲存區。然後設定此信任儲存區供 Keycloak 使用。

設定系統信任儲存區

現有的 Java 預設信任儲存區憑證將永遠受信任。如果您需要額外的憑證,在您有自簽或內部憑證授權機構,且它們不被 JRE 識別的情況下,可以將它們包含在 conf/truststores 目錄或子目錄中。憑證可以是 PEM 檔案,或副檔名為 .p12.pfx 的 PKCS12 檔案。如果在 PKCS12 中,憑證必須是未加密的 - 也就是說不預期有密碼。

如果您需要其他路徑,請使用 --truststore-paths 選項來指定 PEM 或 PKCS12 檔案所在的其他檔案或目錄。路徑是相對於您啟動 Keycloak 的位置,因此建議使用絕對路徑。如果指定目錄,它將會遞迴掃描信任儲存區檔案。

在包含所有適用的憑證後,信任儲存區將透過 javax.net.ssl 屬性作為系統預設信任儲存區使用,並作為 Keycloak 內部的預設使用。

例如

bin/kc.[sh|bat] start --truststore-paths=/opt/truststore/myTrustStore.pfx,/opt/other-truststore/myOtherTrustStore.pem

仍然可以直接設定您自己的 javax.net.ssl 信任儲存區系統屬性,但建議改為使用 --truststore-paths

主機名稱驗證原則

您可以使用 tls-hostname-verifier 屬性來精確控制 TLS 連線如何驗證主機名稱。

  • DEFAULT(預設值)允許子網域名稱中的萬用字元(例如 *.foo.com)匹配具有相同級別數量的名稱(例如 a.foo.com,但不是 a.b.foo.com)- 具有基於 https://publicsuffix.org/list/ 的公共後綴規則和排除。

  • ANY 表示不驗證主機名稱。

  • WILDCARD(已棄用)允許子網域名稱中的萬用字元(例如 *.foo.com)匹配任何內容,包括多個級別(例如 a.b.foo.com)。請改用 DEFAULT。

  • STRICT(已棄用)允許子網域名稱中的萬用字元(例如 *.foo.com)匹配具有相同級別數量的名稱(例如 a.foo.com,但不是 a.b.foo.com)- 具有一些有限的排除。請改用 DEFAULT。

    請注意,此設定不適用於 LDAP 安全連線,該連線需要嚴格的主機名稱檢查。

相關選項

tls-hostname-verifier

用於傳出 HTTPS 和 SMTP 請求的 TLS 主機名稱驗證原則。

CLI: --tls-hostname-verifier
Env: KC_TLS_HOSTNAME_VERIFIER

STRICT 和 WILDCARD 已被棄用,請改用 DEFAULT。已棄用值:WILDCARDSTRICT

ANY, WILDCARD, STRICT, DEFAULT (預設值)

truststore-paths

將用作系統信任儲存區的 pkcs12(p12 或 pfx 檔案副檔名)、PEM 檔案或包含這些檔案的目錄清單。

CLI: --truststore-paths
Env: KC_TRUSTSTORE_PATHS

在此頁面