步骤 2:生成或导入私有密钥和 SSL/TLS 证书 - AWS CloudHSM

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 2:生成或导入私有密钥和 SSL/TLS 证书

要启用 HTTPS,您的 Tomcat Web 服务器应用程需要私有密钥和相应的 SSL/TLS 证书。要将 Web 服务器 SSL/TLS 卸载与一起使用 AWS CloudHSM,必须将私钥存储在集群的 HSM 中。 AWS CloudHSM

注意

如果您没有私有密钥及相应的证书,则可以在 HSM 中生成私有密钥。使用私有密钥创建证书签名请求(CSR),并用它来创建 SSL/TLS 证书。

您可以创建一个本地 AWS CloudHSM KeyStore 文件,其中包含对您在 HSM 上的私钥的引用和关联的证书。在 SSL/TLS 卸载期间,您的 Web 服务器使用该 AWS CloudHSM KeyStore 文件来识别 HSM 上的私钥。

生成私有密钥

本节介绍如何使用来 KeyTool 自 JDK 的生成密钥对。在 HSM 中生成密钥对后,可以将其导出为 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 文件发送给他们,然后使用他们在您的适用于 HTTPS的 Web 服务器中为您提供的签名 SSL/TLS 证书。

除了使用 CA 之外,您还可以使用创建自签名证书。 KeyTool 自签名证书不受浏览器的信任,不应在生产环境中使用。它们可在测试环境中使用。

警告

自签名证书只应在测试环境中使用。对于生产环境,请使用更安全的方法 (如证书颁发机构) 来创建证书。

主题
    生成证书
    1. 获取前面步骤中生成的密钥库文件的副本。

    2. 运行以下命令以使用创建证书签名请求 (CSR)。 KeyTool

      $ 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 服务器