步驟 2:產生或匯入私有金鑰和 SSL/TLS 憑證 - AWS CloudHSM

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

步驟 2:產生或匯入私有金鑰和 SSL/TLS 憑證

若要啟用 HTTPS,Tomcat Web 伺服器應用程式需要私有金鑰和對應 SSL/TLS 憑證。若要搭配使用網頁伺服器 SSL/TLS 卸載 AWS CloudHSM,您必須將私密金鑰儲存在叢集中的 HSM 中。 AWS CloudHSM

注意

如果您還沒有私有金鑰和對應的憑證,可以在 HSM 中產生私有金鑰。您可以使用私有金鑰建立憑證簽署請求 (CSR),以用來建立 SSL/TLS 憑證。

您可以建立一個本機 AWS CloudHSM KeyStore 檔案,其中包含 HSM 上私密金鑰和相關聯憑證的參考。在 SSL/TLS 卸載期間,您的 Web 伺服器會使用該 AWS CloudHSM KeyStore 檔案來識別 HSM 上的私密金鑰。

產生私有金鑰

本節說明如何使用 JDK 產生金鑰配對。 KeyTool 在 HSM 內部產生 key pair 之後,您可以將其匯出為 KeyStore 檔案,然後產生對應的憑證。

根據您的使用案例,您可以產生 RSA 或 EC 金鑰對。下列步驟說明如何產生 RSA 金鑰對。

使用中的genkeypair指 KeyTool 令產生 RSA key pair
  1. 用特定數據替換以下<VARIABLES>後,請使用下列命令產生名為 jsse_keystore.keystore 的金鑰存放區檔案,該檔案將具有 HSM 上私有金鑰的參考。

    $ keytool -genkeypair -alias <UNIQUE ALIAS FOR KEYS> -keyalg <KEY ALGORITHM> -keysize <KEY SIZE> -sigalg <SIGN ALGORITHM> \ -keystore <PATH>/<JSSE KEYSTORE NAME>.keystore -storetype CLOUDHSM \ -dname CERT_DOMAIN_NAME \ -J-classpath '-J'$JAVA_LIB'/*:/opt/cloudhsm/java/*:./*' \ -provider "com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider" \ -providerpath "$CLOUDHSM_JCE_LOCATION" \ -keypass <KEY PASSWORD> -storepass <KEYSTORE PASSWORD>
    • <PATH>:您要生成金鑰存放區檔案的路徑。

    • <UNIQUE ALIAS FOR KEYS>:這是用於唯一識別 HSM 上的金鑰。此別名將被設置為金鑰的 LABEL 屬性。

    • <KEY PASSWORD>:我們會將您金鑰的參考儲存在本機金鑰儲存檔案中,而此密碼會保護該本機參考。

    • <KEYSTORE PASSWORD>:這是本機金鑰存放區檔案的密碼。

    • <JSSE KEYSTORE NAME>:金鑰存放區檔案的名稱。

    • <CERT DOMAIN NAME>:X.500 辨別名稱。

    • <KEY ALGORITHM>:生成金鑰對的金鑰算法(例如,RSA 和 EC)。

    • <KEY SIZE>:要產生金鑰對的金鑰大小 (例如,2048、3072 和 4096)。

    • <SIGN ALGORITHM>:要產生金鑰對的金鑰大小 (例如,SHA1withRSA、SHA224withRSA、SHA256withRSA、SHA384withRSA 和 SHA512withRSA)。

  2. 若要確認命令是否成功,請輸入下列命令,並確認您是否已成功產生 RSA 金鑰對。

    $ ls <PATH>/<JSSE KEYSTORE NAME>.keystore

產生自簽憑證。

產生私有金鑰與金鑰存放區檔案後,您可以使用此檔案來產生憑證簽署要求 (CSR) 和憑證。

在生產環境中,您通常會使用憑證授權單位 (CA) 從 CSR 建立憑證。測試環境不需要 CA。如果您確實使用 CA,請將 CSR 檔案發送給他們,並使用他們在 Web 伺服器中為您提供 HTTPS 的簽名 SSL/TLS 憑證。

作為使用 CA 的替代方法,您可以使用建 KeyTool 立自我簽署憑證。自簽憑證不受瀏覽器所信任,請勿用於生產環境。可以用於測試環境。

警告

自簽憑證應該只用於測試環境。若為生產環境,請使用更安全的方法 (例如憑證授權單位) 來建立憑證。

主題
    產生憑證
    1. 取得先前步驟中產生的金鑰存放區檔案的副本。

    2. 執行下列命令以使用 KeyTool 建立憑證簽署要求 (CSR)。

      $ keytool -certreq -keyalg RSA -alias unique_alias_for_key -file certreq.csr \ -keystore <JSSE KEYSTORE NAME>.keystore -storetype CLOUDHSM \ -J-classpath '-J$JAVA_LIB/*:/opt/cloudhsm/java/*:./*' \ -keypass <KEY PASSWORD> -storepass <KEYSTORE PASSWORD>
      注意

      憑證簽署請求的輸出檔案為 certreq.csr

    簽署憑證
    • 用特定數據替換以下<VARIABLES>後,請執行下列命令,以在 HSM 上的私有金鑰簽署 CSR。這會建立自簽憑證。

      $ keytool -gencert -infile certreq.csr -outfile certificate.crt \ -alias <UNIQUE ALIAS FOR KEYS> -keypass <KEY_PASSWORD> -storepass <KEYSTORE_PASSWORD> -sigalg SIG_ALG \ -storetype CLOUDHSM -J-classpath '-J$JAVA_LIB/*:/opt/cloudhsm/java/*:./*' \ -keystore jsse_keystore.keystore
      注意

      certificate.crt 是使用別名私有金鑰的簽署憑證。

    在金鑰存放區中匯入憑證
    • 用特定數據替換以下<VARIABLES>後,請執行下列命令,將已簽署的憑證匯入為受信任的憑證。此步驟會將憑證儲存在別名所識別的金鑰存放區項目中。

      $ keytool -import -alias <UNIQUE ALIAS FOR KEYS> -keystore jsse_keystore.keystore \ -file certificate.crt -storetype CLOUDHSM \ -v -J-classpath '-J$JAVA_LIB/*:/opt/cloudhsm/java/*:./*' \ -keypass <KEY PASSWORD> -storepass <KEYSTORE_PASSWORD>
    將憑證轉換為 PEM
    • 執行下列命令,將已簽署的憑證檔案 (.crt) 轉換為 PEM。PEM 檔案將用於從 http 用戶端發送請求。

      $ openssl x509 -inform der -in certificate.crt -out certificate.pem

    完成這些步驟之後,前往步驟 3:設定 Web 伺服器