IBM Cloud Docs
使用相互 TLS

使用相互 TLS

「交互傳輸層安全 (mTLS)」鑑別可確保用戶端與伺服器之間雙向的資料流量安全且受信任。 它只適用於任何企業方案等級的客戶。

當配置 mTLS 時,只會授與存取權給具有對應用戶端憑證的要求。 當您的應用程式收到請求時,CIS 會回應客戶端憑證的請求。 如果用戶端無法呈現憑證,則不容許繼續執行要求。 否則,金鑰交換會繼續進行。

mTLS握手圖
mTLS握手圖

配置相互 TLS

Mutual TLS ( mTLS ) 提供以憑證為基礎的用戶端驗證,以增強安全性。預設情況下不啟用 mTLS,並且需要事先根據每個網域進行授權。 若要設定 mTLS,,請遵循下列步驟:

  1. 請求授權。 建立支援個案,要求 mTLS 啟用您的 IBM Cloud 帳戶。

    mTLS 啟用後,就無法停用。

  2. 啟用 mTLS:

    1. 在 CIS 主控台中,按一下安全性,然後選擇 Mutual TLS 索引標籤。
    2. 按一下啟用
  3. 上傳根憑證:

    1. Mutual TLS 頁面的根憑證表中,按一下新增以定義新的根憑證。

    2. 將憑證內容貼入憑證內容欄位。 提供根 CA 憑證的名稱,並新增一個或多個將使用此憑證的端點的完整合格網域名稱 (FQDN)。

      這些 FQDN 是受 mTLS 應用程式政策保護的資源所使用的主機名稱。 您必須將根 CA 與受保護應用程式使用的 FQDN 相關聯。

    3. 按一下儲存

      如果使用中間憑證,請上傳整個憑證鏈。

  4. 建立 mTLS 存取政策:

    1. Mutual TLS 頁面上的 MTLS 存取政策表中,按一下建立以建立存取應用程式。

    2. 選擇或輸入與上載根憑證相關的其中一個 FQDN 相匹配的主機名稱,然後按一下建立

      應用程式政策預先設定為使用 non_identity 的決定,並包含匹配任何有效用戶端憑證的規則。

  5. 使用 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>'
    
  6. 建立 WAF 自訂規則以封鎖未驗證的要求:

    為了改善安全性,尤其是敏感端點 (例如登入路徑或 API),請建立 WAF 規則來攔截未出示有效用戶端憑證的要求。

    1. 在 CIS 主控台中,導覽回安全性區段,然後選擇自訂規則索引標籤。

    2. 按一下建立

    3. 在 Create WAF 自訂規則側面板中,按一下 Use Expression Editor

    4. 輸入以下條件(更新 hostnamepath 根據需要)在使用表達式產生器欄位中。

      (http.host eq "example.com" and http.request.uri.path eq "/authenticate" and not cf.tls_client_auth.cert_verified)
      
    5. 將動作設阻止

    6. 按一下建立

    只有當用戶端憑證成功驗證時,此規則才允許存取驗證。 沒有 mTLS 或使用無效憑證的請求會被攔截。

測試 mTLS 存取

以下範例使用 curl 測試 mTLS 認證,方法是在有客戶端憑證和沒有客戶端憑證的情況下進行請求。

  1. 嘗試在沒有用戶端憑證的情況下存取網站。

    本範例示範使用 curl 測試對強制執行 mTLS 的網站的存取。 本範例中的目標 URL 是 https://auth.example.com

    curl -sv https://auth.example.com
    

    由於沒有提供用戶端憑證,因此預期該要求會以 403 Forbidden 回應失敗。

  2. 將您的用戶端憑證和私人密碼匙加入請求:

    curl -sv https://auth.example.com --cert example.pem --key key.pem
    

    如果用戶端已正確認證,回應會包含 CF_Authorization Set-Cookie 標頭,表示 mTLS 認證成功。

正在驗證相互 TLS

啟用此存取原則時,請使用下列工作流程驗證用戶端憑證:

對來源的所有要求都會評估有效的用戶端憑證。

  1. 用戶端透過傳送 Hello 訊息啟動連線。
  2. 存取應用程式會回應 Hello,並要求客戶端憑證。
  3. 客戶端傳送其證書進行驗證。
  4. 用戶端憑證根據設定的根憑證授權進行驗證。
  5. 如果使用證書鏈,系統也會檢查是否有過期的證書,並驗證整個證書鏈。
  6. 如果用戶端憑證是可信賴的,就會為用戶端產生已簽署的 JSON Web Token (JWT),允許請求及後續請求繼續進行。
  7. 如果客戶端沒有出示有效的憑證,伺服器會傳回 403 Forbidden 回應。

若要使用 API 擷取存取憑證,請參閱 列出存取 憑證。