本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS CloudHSM 使用带有 JSSE 的 Tomcat 在 Linux 上卸载 SSL/TLS
本主题提供使用 Java 安全套接字扩展 (JSSE) 和 JCE SDK 设置 SSL/TLS 卸载的 step-by-step说明。 AWS CloudHSM
概览
在中 AWS CloudHSM,Tomcat 网络服务器在 Linux 上运行以支持 HTTPS。 AWS CloudHSM JCE SDK 提供了一个可与 JSSE(Java 安全套接字扩展)配合使用的接口,以便允许此类网络服务器使用。 HSMs AWS CloudHSM JCE 是将 JSSE 连接到您的 AWS CloudHSM 集群的桥梁。JSSE 是用于安全套接字层(SSL)/传输层安全性协议(TLS)的 Java API。
步骤 1:设置先决条件
要使用带有 AWS CloudHSM Client SDK 5 和 Tomcat Web 服务器的 Tomcat Web 服务器来SSL/TLS offload on Linux. These prerequisites must be met to set up web server SSL/TLS卸载 Tomcat Web 服务器,请遵循以下先决条件。
注意
不同的平台需要不同的先决条件。请始终按照适用于您的平台的正确安装步骤进行操作。
先决条件
-
运行安装了 tomcat 网络服务器的 Linux 操作系统的亚马逊 EC2 实例。
-
一个加密用户(CU),该用户拥有和管理 HSM 上的 Web 服务器的私有密钥。
-
具有至少两个硬件安全模块 (HSMs) 的活动 AWS CloudHSM 集群,且安装并配置了 JCE for Client SDK 5。
注意
您可以使用单个 HSM 集群,但您必须首先禁用客户端密钥持久性。有关更多信息,请参阅管理客户端密钥持久性设置和客户端软件开发工具包 5 配置工具。
如何满足先决条件
-
在至少有两个硬件安全模块的活动 AWS CloudHSM 群集 AWS CloudHSM 上安装和配置 JCE(HSMs)。有关安装的更多信息,请参阅适用于客户端软件开发工具包 5 的 JCE。
-
在可以访问您的 AWS CloudHSM 集群的 EC2 Linux 实例上,按照 Apache Tomcat 的说明
下载并安装 Tomcat Web 服务器。 -
使用 CloudHSM CLI 创建加密用户(CU)。有关管理 HSM 用户的更多信息,请参阅使用 CloudHSM CLI 管理 HSM 用户。
提示
跟踪 CU 用户名和密码。您稍后为 Web 服务器生成或导入 HTTPS 私有密钥和证书时需要它们。
要使用 Java Keytool 设置 JCE,请按照 使用客户端 SDK 5 AWS CloudHSM 与 Java Keytool 和 Jarsigner 集成 中的说明进行操作。
完成这些步骤后,请转到 步骤 2:生成或导入私有密钥和 SSL/TLS 证书。
备注
-
要使用安全增强型 Linux (SELinux) 和 Web 服务器,必须允许端口 2223 上的出站 TCP 连接,该端口是 Client SDK 5 用来与 HSM 通信的端口。
-
要创建和激活集群并授予 EC2 实例访问集群的权限,请完成入门中的步骤 AWS CloudHSM。本节提供 step-by-step有关创建包含一个 HSM 和一个 Amazon EC2 客户端实例的活动集群的说明。您可使用此客户端实例作为您的 Web 服务器。
-
为避免禁用客户端密钥持久性,请向集群添加多个 HSM。有关更多信息,请参阅 HSM向 AWS CloudHSM 集群添加。
-
要连接到客户端实例,可以使用 SSH 或 PuTTY。有关更多信息,请参阅亚马逊 EC2文档中的使用 SSH 连接到你的 Linux 实例或使用 PuTTY 从 Windows 连接到你的 Linux 实例。
步骤 2:生成或导入私有密钥和 SSL/TLS 证书
要启用 HTTPS,您的 Tomcat Web 服务器应用程序需要私钥和相应的SSL/TLS certificate. To use web server 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
用您的特定数据替换
<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、RSA、 SHA224with RSA、 SHA256with RSA SHA384with 和 RSA)。 SHA512with
-
要确认命令是否成功,请输入以下命令并验证您是否成功生成了 RSA 密钥对。
$
ls
<PATH>
/<JSSE KEYSTORE NAME>
.keystore
生成自签名证书
生成私有密钥和密钥库文件后,即可使用此文件生成证书签名请求(CSR)和证书。
在生产环境中,您通常使用证书颁发机构 (CA) 通过 CSR 创建证书。测试环境无需 CA。如果您使用 CA,则请将 CSR 文件发送给他们,然后使用他们在您的适用于 HTTPS的 Web 服务器中为您提供的签名 SSL/TLS 证书。
除了使用 CA 之外,您还可以使用创建自签名证书。 KeyTool 自签名证书不受浏览器的信任,不应在生产环境中使用。它们可在测试环境中使用。
警告
自签名证书只应在测试环境中使用。对于生产环境,请使用更安全的方法 (如证书颁发机构) 来创建证书。
主题
生成证书
-
获取前面步骤中生成的密钥库文件的副本。
-
运行以下命令以使用创建证书签名请求 (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 服务器。
步骤 3:配置 Tomcat Web 服务器
更新您的 Web 服务器软件的配置,以使用 HTTPS 证书和在上一步中创建的相应 PEM 文件。切记在开始前备份您现有的证书。这将完成 Linux网络服务器软件的设置,以便借助 AWS CloudHSM进行 SSL/TLS 分载。有关更多信息,请参考 Apache Tomcat 9 配置参考
停止服务器
用您的特定数据替换
<VARIABLES>
以下内容后,请在更新配置之前运行以下命令停止 Tomcat Server$
/
<TOMCAT DIRECTORY>
/bin/shutdown.sh<TOMCAT DIRECTORY>
: 您的 Tomcat 安装目录。
更新 Tomcat 类路径
-
连接到您的客户端实例。
-
找到 Tomcat 安装文件夹。
-
用您的特定数据替换
<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 连接器。
前往 Tomcat 安装文件夹。
用您的特定数据替换
<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 安装目录的名称。
在更新您的网络服务器配置后,转到 步骤 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 连接。将此安全组分配给您的网络服务器。
为 HTTPS 创建安全组并将其分配给您的网络服务器
-
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择安全组。
-
选择创建安全组。
-
对于创建安全组,执行以下操作:
-
对于安全组名称,键入您要创建的安全组的名称。
-
(可选) 键入对您要创建的安全组的描述。
-
对于 VPC,请选择包含您的网络服务器 Amazon EC2 实例的 VPC。
-
选择添加规则。
-
对于类型,从下拉窗口中选择 HTTPS。
-
对于来源,输入来源位置。
-
选择创建安全组。
-
-
在导航窗格中,选择实例。
-
选中您的 Web 服务器实例旁边的复选框。
-
在页面顶部选择操作下拉菜单。选择安全,然后选择更改安全组。
-
对于关联安全组,请选择搜索框,然后选择您为 HTTPS 创建的安全组。然后选择添加安全组。
-
选择保存。
验证 HTTPS 使用的是您已配置的证书
将 Web 服务器添加到安全组后,您可以验证 SSL/TLS 卸载是否正在使用您的自签名证书。您可以使用网络浏览器或使用工具 (如 OpenSSL s_client
使用网络浏览器验证 SSL/TLS 分载
-
使用 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/)路由到您的网络服务器。有关更多信息,请参阅 Amazon R oute 53 开发者指南或您的 DNS 服务文档中的将流量路由到亚马逊 EC2实例。
-
使用您的 Web 浏览器查看 Web 服务器证书。有关更多信息,请参阅下列内容:
其他网络浏览器可能具有相似的功能,可使用这些功能来查看网络服务器证书。
-
确保 SSL/TLS 证书是您配置 Web 服务器使用的证书。
使用 OpenSSL s_client 验证 SSL/TLS 分载
-
运行以下 OpenSSL 命令以通过 HTTPS 连接到您的 Web 服务器。
<server name>
替换为您的 Web 服务器的公有 DNS 名称或 IP 地址。openssl s_client -connect
<server name>
:443提示
您可以使用诸如 Amazon Route 53 之类的 DNS 服务将您网站的域名(例如 https://www.example.com/)路由到您的网络服务器。有关更多信息,请参阅 Amazon R oute 53 开发者指南或您的 DNS 服务文档中的将流量路由到亚马逊 EC2实例。
-
确保 SSL/TLS 证书是您配置 Web 服务器使用的证书。
您现在有一个通过 HTTPS 保护的网站。Web 服务器的私钥存储在 AWS CloudHSM 集群的 HSM 中。
若要添加负载均衡器,请参阅 使用 Elastic Load Balancing 为 AWS CloudHSM 添加负载均衡器(可选)。