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

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

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

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

概觀

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

步驟 1:設定先決條件

請依照這些先決條件,搭配 使用 Tomcat Web 伺服器 AWS CloudHSM ,搭配 Client SDK 5 和 Tomcat Web 伺服器SSL/TLS offload on Linux. These prerequisites must be met to set up web server SSL/TLS卸載。

注意

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

必要條件

  • 執行已安裝 A tomcat Web 伺服器的 Linux 作業系統的 Amazon EC2執行個體。

  • 在 上擁有和管理 Web 伺服器私有金鑰的加密使用者 (CU)HSM。

  • 具有至少兩個硬體安全模組 (HSMs) 的作用中 AWS CloudHSM 叢集,其中已安裝並設定 JCE 用戶端 SDK 5 的 。

    注意

    您可以使用單一HSM叢集,但必須先停用用戶端金鑰耐久性。如需詳細資訊,請參閱管理用戶端金鑰耐久性設定用戶端 SDK 5 設定工具

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

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

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

    提示

    保持追蹤 CU 使用者名稱和密碼。稍後當您為 Web 伺服器產生或匯入HTTPS私有金鑰和憑證時,您將需要這些金鑰和憑證。

  4. 若要JCE使用 Java Keytool 設定 ,請遵循 中的指示使用用戶端 SDK 5 AWS CloudHSM 與 Java Keytool 和 Jarsigner 整合

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

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

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

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

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

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

若要啟用 HTTPS,您的 Tomcat Web 伺服器應用程式需要私有金鑰和具有 的對應SSL/TLS certificate. To use web server SSL/TLS卸載 AWS CloudHSM,您必須將私有金鑰存放在 AWS CloudHSM 叢集中的 HSM中。

注意

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

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

產生私有金鑰

本節說明如何使用 KeyTool 來自 的 產生金鑰對JDK。在 內產生金鑰對後HSM,即可將其匯出為 KeyStore 檔案,並產生對應的憑證。

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

使用 中的genkeypair命令 KeyTool 來產生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>:Keystore 檔案的名稱。

    • <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 伺服器中為您提供的已簽署SSL/TLS憑證HTTPS。

除了使用 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> 使用特定資料執行下列命令,在 CSR 上使用私有金鑰簽署您的 HSM。這會建立自簽憑證。

      $ 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 卸載設定 Linux Web 伺服器軟體 AWS CloudHSM。如需詳細資訊,請參閱 Apache Tomcat 9 組態參考

    停止伺服器
    • 取代 後 <VARIABLES> 使用特定資料執行下列命令,在更新組態之前停止 Tomcat Server

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

    更新 Tomcat 類別路徑
    1. 連接至您的用戶端執行個體。

    2. 找到 Tomcat 安裝資料夾。

    3. 取代 後 <VARIABLES> 使用下列命令,搭配您的特定資料,在 Tomcat classpath 中新增 Java 程式庫和 Cloudhsm Java 路徑,該路徑位於 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 Library 位置。

      • <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 檔案的名稱。

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

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

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

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

    啟動伺服器
    • 取代 後 <VARIABLES> 使用下列命令來啟動 Tomcat Server:

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

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

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

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

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

    啟用傳入HTTPS連線

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

    為 建立安全群組,HTTPS並將其指派給您的 Web 伺服器
    1. 在 開啟 Amazon EC2主控台https://console.aws.amazon.com/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/

      提示

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

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

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

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

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

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

    使用 OpenSSL s_client 驗證SSL/TLS卸載
    1. 執行下列 OpenSSL 命令,使用 連線至您的 Web 伺服器HTTPS。Replace (取代) <server name> 使用 Web 伺服器的公有DNS名稱或 IP 地址。

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

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

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

    您現在有一個使用 保護的網站HTTPS。Web 伺服器的私有金鑰會儲存在 AWS CloudHSM 叢集HSM中的 中。

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