啟用 EP11 連線的第二層鑑別-僅限標準方案

若要確保對加密作業執行的專用控制,您可以使用 Hyper Protect Crypto Services 憑證管理程式 CLI 來啟用 EP11 (GREP11 或 PKCS #11 API) 連線的第二層鑑別。 透過啟用此功能,您可以在 EP11 應用程式的 Identity and Access Management (IAM) 記號上新增額外的存取控制層。 建立相互 TLS 連線以確保只有具有有效用戶端憑證的 EP11 應用程式才能執行 EP11 作業。

EP11 連線的第二層鑑別目前僅受 Hyper Protect Crypto Services 標準方案支援。

啟用交互 TLS 鑑別的安全及可用性最佳作法

使用交互 TLS 作為存取 EP11的第二層鑑別,您需要瞭解下列安全及可用性考量:

  • 如果您需要防止特定人員存取 EP11,請將憑證管理者與服務使用者分開。 透過僅將 Certificate Manager 角色指派給管理用戶端憑證的人員,並將作業用途的對應角色指派給其他服務使用者,來控制存取權。 若要管理使用者存取權,您需要獲指派具有帳戶管理存取權的 管理者 角色。
  • 如果您使用無效的用戶端憑證或使用無法使用的私密金鑰來簽署用戶端憑證,則無法存取 EP11 API。 若要確保可用性,請將 Certificate Manager 角色指派給多人作為備份。 憑證管理者需要安全地維護其唯一管理者私密金鑰。 憑證管理者還需要維護 Hyper Protect Crypto Services 實例外部所有用戶端憑證的備份,例如,使用 IBM Cloud Secrets Manager。 也建議監視憑證的有效期限。

開始之前

在您可以對 GREP11 或 PKCS #11 API 連線啟用第二層鑑別之前,請確定您已完成下列必要條件:

  1. 您會獲指派 Certificate Manager IAM 角色,以執行對應的動作。 如需指派 IAM 角色的相關資訊,請參閱 管理使用者存取權管理資源的存取權

  2. 您已在工作站上準備用於 TLS 鑑別的用戶端憑證。 建議使用 IBM Cloud Secrets Manager 來管理應用程式及服務的 SSL/TLS 憑證。 它是免費的,並為您的憑證提供持續性儲存體。

  3. 安裝 IBM Cloud CLI

  4. 使用下列指令安裝最新的憑證管理程式 CLI 外掛程式:

    ibmcloud plugin install hpcs-cert-mgr
    
  5. 使用 CLI 登入 IBM Cloud。 如果您有多個帳戶,請選取用來建立服務實例的帳戶。 請確定您使用下列指令登入服務實例所在的正確地區及資源群組:

    ibmcloud target -r <region> -g <resource_group>
    

步驟 1: 配置管理者簽章金鑰

若要啟用第二層鑑別,您需要先配置管理者簽章金鑰。 簽章金鑰可讓您連接至處理憑證管理程式 CLI 指令的實例憑證管理程式伺服器。

  1. 使用下列指令產生簽章金鑰組:

    ibmcloud hpcs-cert-mgr adminkey set --crn HPCS_CRN [--private]
    

    HPCS_CRN 變數取代為 Hyper Protect Crypto Services 實例的雲端資源名稱 (CRN)。 您可以使用 ibmcloud resource service-instances --long 指令來擷取 CRN。 參數 --private 是選用項目。 如果您使用此選項,則憑證管理程式伺服器 URL 會指向專用端點,且您需要使用專用網路來連接服務實例。

    執行此指令之後,會產生公開和私密金鑰組,並儲存在本端工作站上。 預設檔案路徑為 /Users/<username>/.hpcs-cert-mgr-cfg/。 請確保安全地儲存簽章金鑰,例如使用密碼保護。 公開金鑰會自動上傳至實例憑證管理程式伺服器,以進行簽章驗證。

    如果您想要重新整理並更新簽章金鑰,您可以使用 ibmcloud hpcs-cert-mgr adminkey update 指令來執行動作。 如需 CLI 用法的相關資訊,請參閱 Hyper Protect Crypto Services 憑證管理程式 CLI 參考資料

  2. (選用) 使用下列指令,檢查並確認公開金鑰是否已上傳至伺服器:

    ibmcloud hpcs-cert-mgr adminkey get --crn HPCS_CRN [--private]
    

    如果此指令傳回公開金鑰值,則表示您已順利上傳公開金鑰。

步驟 2: 設定用於鑑別的用戶端 CA 憑證

配置管理者簽章金鑰之後,您需要將用戶端 憑證管理中心(CA)A trusted third-party organization or company that issues the digital certificates. The certificate authority typically verifies the identity of the individuals who are granted the unique certificate. 憑證上傳至實例憑證管理程式伺服器,以進行 TLS 用戶端鑑別。

設定用戶端 CA 憑證之後,您就無法再透過使用者介面來存取 EP11 金鑰儲存庫和 EP11 金鑰。

  1. (選用) 準備 CA 和用戶端憑證

    您可以使用 OpenSSL 公用程式為 GREP11 基礎架構產生 CA 憑證。

    請確定您在可用來產生憑證的工作站上安裝 OpenSSL。 在工作站上完成下列步驟:

    1. 執行下列指令來產生 CA 金鑰:
      openssl genrsa -out ca.key 2048
      
    2. 執行下列指令來建立 CA 憑證:
      openssl req -new -x509 -key ca.key -days 730 -out ca.pem
      
    3. 執行下列指令來建立用戶端金鑰:
      openssl genrsa -out client-key.pem 2048
      
    4. 執行下列指令,以建立用戶端憑證簽署要求:
      openssl req -new -key client-key.pem -out client.csr
      
    5. 執行下列指令來建立用戶端憑證:
      openssl x509 -req -days 730 -in client.csr -CA ca.pem -CAcreateserial -CAkey ca.key -out client.pem
      
  2. 使用下列指令,將用戶端 CA 憑證上傳至伺服器:

    如果您的用戶端憑證是由憑證鏈中的中繼 CA 憑證所簽署,則您需要上傳該中繼 CA 憑證。

    ibmcloud hpcs-cert-mgr cert set --crn HPCS_CRN --admin-priv-key ADMIN_PRIV_KEY --cert-id CERT_ID --cert CERT_FILE [--private]
    

    根據下表取代範例要求中的變數。

    表 1. 說明上傳 TLS 憑證所需的變數
    變數 說明
    HPCS_CRN 必要。 Hyper Protect Crypto Services 實例的雲端資源名稱 (CRN)。 您可以使用 ibmcloud resource service-instances --long 指令來擷取 CRN。
    ADMIN_PRIV_KEY 必要。 您在 步驟 1 中產生或更新之本端工作站上的現行私密金鑰檔案路徑。 私密金鑰用來對實例憑證管理程式伺服器簽署此指令動作。
    CERT_ID 必要。 您要指派給用戶端 CA 憑證以方便識別的字串 ID。
    CERT_FILE 必要。 本端工作站上用戶端 CA 憑證的檔案路徑。

    參數 --private 是選用項目。 如果您使用此選項,則憑證管理程式伺服器 URL 會指向專用端點,且您需要使用專用網路來連接服務實例。

  3. (選用) 使用下列指令,檢查並確認用戶端 CA 憑證是否已上傳至伺服器:

    ibmcloud hpcs-cert-mgr cert list --crn HPCS_CRN [--private]
    

    此指令會列出伺服器上由您管理的所有可用用戶端 CA 憑證。 如果清單包含先前上傳的憑證,則表示動作已順利完成。

步驟 3: 建立 EP11 應用程式的相互 TLS 連線

設定管理者簽章金鑰及用戶端 CA 憑證之後,EP11 使用者可以為使用 GREP11 或 PKCS #11 API 的應用程式建立相互 TLS 連線。 在 EP11 使用者可以執行此動作之前,他們需要使用用戶端憑證來配置 GREP11 或 PKCS #11 應用程式。

若要使用 GREP11 或 PKCS #11 API,請確定已為 EP11 使用者指派適當的 IAM 角色,以執行 EP11 作業。 如需相關資訊,請參閱 IAM 服務存取角色 中的 HSM API 標籤。

  • 配置 GREP11 應用程式

    視您用於 GREP11 應用程式的程式設計語言而定,配置方法會根據對應的 gRPC 套件而有所不同。 下列提供 Golang 和 JavaScript的範例。

    • Golang 程式碼 Snippet 範例

      cert, _ := tls.LoadX509KeyPair("client.pem", "client-key.pem")
      var callOpts = []grpc.DialOption{
        grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}}))
      }
      

      需要根據 Config 類型結構適當地定義 tls.Config{}。 您至少需要設定 Certificates 欄位。 請確定使用您的用戶端金鑰和用戶端憑證。 如需完整的 Golang 範例程式碼,請參閱 適用於 Golang 的範例 GitHub 儲存庫

    • JavaScript 程式碼 Snippet 範例

      credentials.push(grpc.credentials.createSsl());
      

      如需函數及參數的詳細資訊,請參閱 認證模組文件。 您需要設定 createSsl() 函數的 private_keycert_chain 參數。 如需完整的 JavaScript 範例程式碼,請參閱 JavaScript 的範例 GitHub 儲存庫

  • 配置 PKCS #11 應用程式

    PKCS #11 會在其 配置檔 中處理相互 TLS。 根據下列範例更新 tls 欄位:

    tls:
      enabled: true
      mutual: true
      cacert:
      certfile: "<client_certificate>"
      keyfile: "<client_certificate_private_key>"
    

    根據下表取代範例中的變數:

    表 3. 說明配置 PKCS #11 應用程式所需的變數
    變數 說明
    client_certificate 必要。 憑證管理者上傳至伺服器之用戶端憑證的檔案路徑。
    client_certificate_private_key 必要。 用來簽署憑證之用戶端憑證私密金鑰的檔案路徑。

配置之後,當應用程式使用 GREP11 或 PKCS #11 API 來執行加密作業時,會建立相互 TLS 連線,並驗證用戶端憑證是否有其他鑑別層。

(選用) 停用相互 TLS 連線

如果您不再需要第二層鑑別,則可以透過刪除伺服器上的所有用戶端 CA 憑證來停用此功能。

  1. 使用下列指令刪除 CA 憑證。 重複此步驟,以刪除伺服器上所有可用的憑證,以停用來自 EP11 應用程式的 TLS 連線。

    ibmcloud hpcs-cert-mgr cert delete --crn HPCS_CRN --admin-priv-key ADMIN_PRIV_KEY --cert-id CERT_ID [--private]
    

    根據下表取代範例要求中的變數。

    表 2. 說明刪除 CA 憑證所需的變數
    變數 說明
    HPCS_CRN 必要。 Hyper Protect Crypto Services 實例的雲端資源名稱 (CRN)。 您可以使用 ibmcloud resource service-instances --long 指令來擷取 CRN。
    ADMIN_PRIV_KEY 必要。 儲存在本端工作站上之現行私密金鑰的檔案路徑。 私密金鑰用來對實例憑證管理程式伺服器簽署此指令動作。
    CERT_ID 必要。 您要刪除之 CA 憑證的字串 ID。 您可以先使用 ibmcloud hpcs-cert-mgr cert list --crn HPCS_CRN 指令來列出所有憑證,包括其 ID。

    參數 --private 是選用項目。 如果您使用此選項,則憑證管理程式伺服器 URL 會指向專用端點,且您需要使用專用網路來連接服務實例。

    如果為服務實例設定多個憑證管理者,請確保刪除這些管理者下的所有 CA 憑證。

    如果您從憑證管理程式伺服器刪除 CA 憑證,則使用此 CA 憑證發出的用戶端憑證的所有應用程式都無法透過相互 TLS 連線來存取 GREP11 實例。

    從憑證管理程式伺服器刪除所有 CA 憑證之後,會停用 GREP11 實例的交互 TLS 鑑別。 然後,應用程式不需要相互 TLS 連線即可連接至 GREP11 實例。

  2. (選用) 使用下列指令檢查並確認是否已刪除所有 CA 憑證:

    ibmcloud hpcs-cert-mgr cert list --crn HPCS_CRN [--private]
    

    如果未傳回任何憑證,則表示會刪除服務實例的所有憑證。

  3. (選用) 更新 GREP11 或 PKCS #11 應用程式,以刪除憑證配置,讓應用程式不再將憑證用於未來的 API 連線。

下一步