AWS CloudHSM 搭配 JSSE 使用 Tomcat 在 Linux 上卸載 SSL/TLS - AWS CloudHSM

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

AWS CloudHSM 搭配 JSSE 使用 Tomcat 在 Linux 上卸載 SSL/TLS

本主題提供step-by-step說明,以使用 Java Secure Socket Extension (JSSE) 搭配 AWS CloudHSM JCE SDK 設定 SSL/TLS 卸載。

概觀

在 中 AWS CloudHSM,Tomcat Web 伺服器會在 Linux 上運作以支援 HTTPS。 AWS CloudHSM JCE SDK 提供可與 JSSE (Java Secure Socket Extension) 搭配使用的界面,以啟用此類 Web 伺服器的 HSMs。 AWS CloudHSM JCE 是將 JSSE 連接至 AWS CloudHSM 叢集的橋接器。JSSE 是適用於 Secure Sockets Layer (SSL) 和 Transport Layer Security (TLS) 通訊協定的 Java API。

步驟 1:設定先決條件

請依照這些先決條件,在 Linux 上使用 Tomcat Web 伺服器與 AWS CloudHSM for SSL/TLS 卸載。您必須符合這些先決條件,才能透過用戶端 SDK 5 和 Tomcat Web 伺服器來設定 Web 伺服器 SSL/TLS 卸載。

注意

不同平台需要不同的先決條件。請務必遵循適用於平台的正確安裝步驟。

先決條件

如何滿足先決條件
  1. 在具有至少兩個硬體安全模組 (HSMs的作用中 AWS CloudHSM 叢集 AWS CloudHSM 上安裝和設定 的 JCE。如需關於安裝的詳細資訊,請參閱用戶端 SDK 5 的 JCE

  2. 在可存取 AWS CloudHSM 叢集的 EC2 Linux 執行個體上,遵循 Apache Tomcat 指示下載並安裝 Tomcat Web 伺服器。

  3. 使用 CloudHSM CLI 建立加密使用者 (CU)。如需關於管理 HSM 使用者的詳細資訊,請參閱使用 CloudHSM CLI 管理 HSM 使用者

    提示

    保持追蹤 CU 使用者名稱和密碼。之後在為您的 Web 伺服器產生或匯入 HTTPS 私有金鑰和憑證時,您將會需要該資訊。

  4. 要使用 Java Keytool 設置 JCE,請按照 使用用戶端 SDK 5 AWS CloudHSM 與 Java Keytool 和 Jarsigner 整合 中的說明進行操作。

完成這些步驟之後,請移至 步驟 2:產生或匯入私有金鑰和 SSL/TLS 憑證

備註
  • 若要使用 Security-Enhanced Linux (SELinux) 和 Web 伺服器,您必須在連接埠 2223 上允許傳出 TCP 連線,也就是用戶端 SDK 5 用來與 HSM 通訊的連接埠。

  • 若要建立和啟用叢集並授予 EC2 執行個體存取叢集的權限,請完成AWS CloudHSM入門中的步驟。本節提供使用一個 HSM 和 Amazon EC2 用戶端執行個體建立作用中叢集的逐步說明。可以使用此用戶端執行個體做為 Web 伺服器。

  • 若要避免停用用戶端金鑰耐久性,請在叢集中新增多個 HSM。如需詳細資訊,請參閱將 HSM新增至 AWS CloudHSM 叢集

  • 要連接到用戶端執行個體,可以使用 SSH 或 PuTTY。如需詳細資訊,請參閱 Amazon EC2 文件中的使用 SSH 連接至您的 Linux 執行個體使用 PuTTY 從 Windows 連接至您的 Linux 執行個體

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

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

注意

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

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

產生私有金鑰

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

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

在 KeyTool 中使用 genkeypair 命令,以產生 RSA 金鑰對。
  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 伺服器

    步驟 3:設定 Tomcat Web 伺服器

    更新 Web 伺服器軟體組態,以使用 HTTPS 憑證以及您在 上一個步驟中建立的對應 PEM 檔案。請記得在開始之前備份現有的憑證和金鑰。這將完成針對 SSL/TLS 卸載搭配 AWS CloudHSM設定您的 Linux Web 伺服器軟體。如需詳細資訊,請參閱 Apache Tomcat 9 組態參考

    停止伺服器
    • 用特定數據替換以下<VARIABLES>後,請運行以下命令以在更新組態之前停止 Tomcat 伺服器。

      $ /<TOMCAT DIRECTORY>/bin/shutdown.sh
      • <TOMCAT DIRECTORY>:Tomcat 安裝目錄。

    更新 Tomcat classpath
    1. 連接至您的用戶端執行個體。

    2. 找到 Tomcat 安裝資料夾。

    3. 將以下 <VARIABLES> 取代為您的特定資料後,請使用下列命令在 Tomcat 中新增 Java 程式庫和 AWS CloudHSM Java 路徑classpath,該檔案位於 Tomcat/bin/catalina.sh 檔案。

      $ sed -i 's@CLASSPATH="$CLASSPATH""$CATALINA_HOME"\/bin\/bootstrap.jar@CLASSPATH="$CLASSPATH""$CATALINA_HOME"\/bin\/bootstrap.jar:'" <JAVA LIBRARY>"'\/*:\/opt\/cloudhsm\/java\/*:.\/*@' <TOMCAT PATH> /bin/catalina.sh
      • <JAVA LIBRARY>:Java JRE 程式庫位置。

      • <TOMCAT PATH>:Tomcat 安裝資料夾。

    在伺服器組態中新增 HTTPS 連接器。
    1. 前往 Tomcat 安裝資料夾。

    2. 用特定數據替換下面的<VARIABLES>後,請使用下列命令新增 HTTPS 連接器,以使用必要條件中產生的憑證:

      $ sed -i '/<Connector port="8080"/i <Connector port=\"443\" maxThreads=\"200\" scheme=\"https\" secure=\"true\" SSLEnabled=\"true\" keystoreType=\"CLOUDHSM\" keystoreFile=\" <CUSTOM DIRECTORY>/<JSSE KEYSTORE NAME>.keystore\" keystorePass=\"<KEYSTORE PASSWORD>\" keyPass=\"<KEY PASSWORD> \" keyAlias=\"<UNIQUE ALIAS FOR KEYS>" clientAuth=\"false\" sslProtocol=\"TLS\"/>' <TOMCAT PATH>/conf/server.xml
      • <CUSTOM DIRECTORY>:金鑰存放區檔案所在的目錄。

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

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

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

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

      • <TOMCAT PATH>:Tomcat 資料夾的路徑。

    啟動伺服器
    • 用特定數據替換以下<VARIABLES>後,使用以下命令啟動 Tomcat 伺服器:

      $ /<TOMCAT DIRECTORY>/bin/startup.sh
      注意

      <TOMCAT DIRECTORY>是您的 Tomcat 安裝目錄的名稱。

    在更新您的 Web 伺服器組態之後,請前往 步驟 4:啟用 HTTPS 流量並驗證憑證

    步驟 4:啟用 HTTPS 流量並驗證憑證

    使用 設定 Web 伺服器進行 SSL/TLS 卸載後 AWS CloudHSM,請將 Web 伺服器執行個體新增至允許傳入 HTTPS 流量的安全群組。這可讓用戶端 (例如 Web 瀏覽器) 與 Web 伺服器建立 HTTPS 連線。然後,建立與 Web 伺服器的 HTTPS 連線,並驗證其是否使用您為 SSL/TLS 卸載設定的憑證 AWS CloudHSM。

    啟用傳入 HTTPS 連線

    若要從用戶端 (例如 Web 瀏覽器) 連接到 Web 伺服器,請建立允許傳入 HTTPS 連接的安全群組。特別是應該允許連接埠 443 上的傳入 TCP 連線。將此安全群組指派到您的 Web 伺服器。

    建立 HTTPS 的安全群組並將其指派至您的 Web 伺服器
    1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

    2. 在導覽窗格中選擇安全群組

    3. 選擇建立安全群組

    4. 對於 Create Security Group (建立安全群組),執行下列動作:

      1. 對於 Security group name (安全群組名稱),輸入您要建立之安全群組的名稱。

      2. (選用) 輸入您要建立之安全群組的描述。

      3. 對於 VPC,選擇包含 Web 伺服器 Amazon EC2 執行個體的 VPC。

      4. 選取 Add Rule (新增規則)

      5. 對於類型,從下拉式視窗中選取 HTTPS

      6. 對於來源,輸入來源位置。

      7. 選擇建立安全群組

    5. 在導覽窗格中,選擇 Instances (執行個體)。

    6. 選取 Web 伺服器執行個體旁的核取方塊。

    7. 選取頁面頂端的動作下拉式選單。選取安全性,然後選取變更安全群組

    8. 對於關聯的安全群組,請選取搜尋方塊,然後選取您為 HTTPS 建立之安全群組。然後選擇新增安全群組

    9. 選取 Save (儲存)。

    驗證 HTTPS 是否使用您已設定的憑證

    將 Web 伺服器新增至安全群組後,您可以驗證 SSL/TLS 卸載是否使用您的自我簽署憑證。若要這樣做,您可以使用 Web 瀏覽器或使用 OpenSSL s_client 之類的工具。

    使用 Web 瀏覽器驗證 SSL/TLS 卸載
    1. 使用 Web 瀏覽器來透過伺服器的公有 DNS 名稱或 IP 地址連接到您的 Web 伺服器。請確定網址列中的 URL 開頭為 https://。例如:https://ec2-52-14-212-67.us-east-2.compute.amazonaws.com/

      提示

      您可以使用 DNS 服務 (例如 Amazon Route 53),將網站的網域名稱 (例如,https://www.example.com/) 路由到 Web 伺服器。如需詳細資訊,請參閱《Amazon Route 53 開發人員指南》或 DNS 服務文件中的將流量路由到 Amazon EC2 執行個體

    2. 使用您的 Web 瀏覽器來檢視 Web 伺服器憑證。如需詳細資訊,請參閱下列內容:

      • 若為 Mozilla Firefox,請參閱 Mozilla 技術支援網站上的檢視憑證

      • 若為 Google Chrome,請參閱 Google Web 開發人員工具網站上的了解安全問題

      其他 Web 瀏覽器可能有類似的功能,可供您用來檢視 Web 伺服器憑證。

    3. 確保 SSL/TLS 憑證是您設定 Web 伺服器所要使用的憑證。

    使用 OpenSSL s_client 來驗證 SSL/TLS 卸載
    1. 執行以下 OpenSSL 命令來使用 HTTPS 連接至 Web 伺服器。以 Web 伺服器的公有 DNS 名稱或 IP 地址來取代<伺服器名稱>

      openssl s_client -connect <server name>:443
      提示

      您可以使用 DNS 服務 (例如 Amazon Route 53),將網站的網域名稱 (例如,https://www.example.com/) 路由到 Web 伺服器。如需詳細資訊,請參閱《Amazon Route 53 開發人員指南》或 DNS 服務文件中的將流量路由到 Amazon EC2 執行個體

    2. 確保 SSL/TLS 憑證是您設定 Web 伺服器所要使用的憑證。

    您現在有透過 HTTPS 而受到保護的網站。Web 伺服器的私有金鑰存放在 AWS CloudHSM 叢集的 HSM 中。

    若要新增負載平衡器,請參閱 使用 Elastic Load Balancing 新增負載平衡器 AWS CloudHSM(選用)