使用相互 TLS
「交互傳輸層安全 (mTLS)」鑑別可確保用戶端與伺服器之間雙向的資料流量安全且受信任。 它只適用於任何企業方案等級的客戶。
當配置 mTLS 時,只會授與存取權給具有對應用戶端憑證的要求。 當您的應用程式收到請求時,CIS 會回應客戶端憑證的請求。 如果用戶端無法呈現憑證,則不容許繼續執行要求。 否則,金鑰交換會繼續進行。
配置相互 TLS
Mutual TLS ( mTLS ) 提供以憑證為基礎的用戶端驗證,以增強安全性。預設情況下不啟用 mTLS,並且需要事先根據每個網域進行授權。 若要設定 mTLS,,請遵循下列步驟:
-
請求授權。 建立支援個案,要求 mTLS 啟用您的 IBM Cloud 帳戶。
mTLS 啟用後,就無法停用。
-
啟用 mTLS:
- 在 CIS 主控台中,按一下安全性,然後選擇 Mutual TLS 索引標籤。
- 按一下啟用。
-
上傳根憑證:
-
在 Mutual TLS 頁面的根憑證表中,按一下新增以定義新的根憑證。
-
將憑證內容貼入憑證內容欄位。 提供根 CA 憑證的名稱,並新增一個或多個將使用此憑證的端點的完整合格網域名稱 (FQDN)。
這些 FQDN 是受 mTLS 應用程式政策保護的資源所使用的主機名稱。 您必須將根 CA 與受保護應用程式使用的 FQDN 相關聯。
-
按一下儲存。
如果使用中間憑證,請上傳整個憑證鏈。
-
-
建立 mTLS 存取政策:
-
在 Mutual TLS 頁面上的 MTLS 存取政策表中,按一下建立以建立存取應用程式。
-
選擇或輸入與上載根憑證相關的其中一個 FQDN 相匹配的主機名稱,然後按一下建立。
應用程式政策預先設定為使用
non_identity的決定,並包含匹配任何有效用戶端憑證的規則。
-
-
使用 API 啟用客戶端憑證轉送:
要將已驗證的用戶端憑證轉送至原始伺服器 (對於記錄、審計或後端驗證很有用),您必須啟用轉送功能。
用戶端憑證只會隨著每個 mTLS 連線中的第一個請求轉寄。
有關啟用用戶端憑證轉發的 API curl 範例,請參閱 更新存取憑證設定 API。
傳送至您的原始伺服器的用戶端憑證標頭:
Cf-Client-Cert-Der-Base64: Base64-encoded 用戶端憑證的 DER 版本Cf-Client-Cert-Sha256:SHA-256 客戶端憑證的指紋
要使用 API 驗證轉送狀態:
curl -X GET https://api.cis.cloud.ibm.com/v1/crn:v1:bluemix:public:internet-svcs:global:a/<account-id>:<instance-id>::/zones/<zone-id>/access/certificates/settings \ -H 'X-Auth-User-Token: Bearer <IAM-TOKEN>' -
建立 WAF 自訂規則以封鎖未驗證的要求:
為了改善安全性,尤其是敏感端點 (例如登入路徑或 API),請建立 WAF 規則來攔截未出示有效用戶端憑證的要求。
-
在 CIS 主控台中,導覽回安全性區段,然後選擇自訂規則索引標籤。
-
按一下建立。
-
在 Create WAF 自訂規則側面板中,按一下 Use Expression Editor。
-
輸入以下條件(更新
hostname和path根據需要)在使用表達式產生器欄位中。(http.host eq "example.com" and http.request.uri.path eq "/authenticate" and not cf.tls_client_auth.cert_verified) -
將動作設為阻止。
-
按一下建立。
只有當用戶端憑證成功驗證時,此規則才允許存取驗證。 沒有 mTLS 或使用無效憑證的請求會被攔截。
-
測試 mTLS 存取
以下範例使用 curl 測試 mTLS 認證,方法是在有客戶端憑證和沒有客戶端憑證的情況下進行請求。
-
嘗試在沒有用戶端憑證的情況下存取網站。
本範例示範使用 curl 測試對強制執行 mTLS 的網站的存取。 本範例中的目標 URL 是
https://auth.example.com。curl -sv https://auth.example.com由於沒有提供用戶端憑證,因此預期該要求會以
403 Forbidden回應失敗。 -
將您的用戶端憑證和私人密碼匙加入請求:
curl -sv https://auth.example.com --cert example.pem --key key.pem如果用戶端已正確認證,回應會包含
CF_Authorization Set-Cookie標頭,表示 mTLS 認證成功。
正在驗證相互 TLS
啟用此存取原則時,請使用下列工作流程驗證用戶端憑證:
對來源的所有要求都會評估有效的用戶端憑證。
- 用戶端透過傳送
Hello訊息啟動連線。 - 存取應用程式會回應
Hello,並要求客戶端憑證。 - 客戶端傳送其證書進行驗證。
- 用戶端憑證根據設定的根憑證授權進行驗證。
- 如果使用證書鏈,系統也會檢查是否有過期的證書,並驗證整個證書鏈。
- 如果用戶端憑證是可信賴的,就會為用戶端產生已簽署的 JSON Web Token (JWT),允許請求及後續請求繼續進行。
- 如果客戶端沒有出示有效的憑證,伺服器會傳回
403 Forbidden回應。
若要使用 API 擷取存取憑證,請參閱 列出存取 憑證。