AWS CloudHSM 使用 IIS 和 KSP 在 Windows 上卸载 SSL/TLS - AWS CloudHSM

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

AWS CloudHSM 使用 IIS 和 KSP 在 Windows 上卸载 SSL/TLS

本教程提供了在 Windows Web 服务器 AWS CloudHSM 上使用设置 SSL/TLS 卸载的 step-by-step说明。

概览

在 Windows 上,Internet Information Services (IIS) for Windows Server Web 服务器应用程序本机支持 HTTPS。Microsoft 加密学 API:下一代 (CNG) 的AWS CloudHSM 密钥存储提供程序 (KSP) 提供了一个接口,允许 IIS 使用集群 HSMs 中的进行加密卸载和密钥存储。 AWS CloudHSM KSP 是将 IIS 连接到您的 AWS CloudHSM 集群的桥梁。

本教程介绍如何执行以下操作:

  • 在 Amazon EC2 实例上安装 Web 服务器软件。

  • 使用存储在您的 AWS CloudHSM 集群中的私有密钥将 Web 服务器软件配置为支持 HTTPS。

  • (可选)使用 Amazon EC2 创建第二个 Web 服务器实例,使用 Elastic Load Balancing 创建负载均衡器。使用负载均衡器可以在多台服务器中分配负载,从而提高性能。它还能在一台或多台服务器发生故障的情况下提供冗余和更高的可用性。

在您准备好开始使用后,请转到 步骤 1:设置先决条件

步骤 1:设置先决条件

不同的平台需要不同的先决条件。请使用以下与您的平台匹配的先决条件部分。

客户端软件开发工具包 5 的先决条件

要使用设置 Web 服务器 SSL/TLS 卸载 AWS CloudHSM,您需要满足以下条件:

  • 至少有一个 HSM 的活动 AWS CloudHSM 集群。

  • 运行安装了以下软件的 Windows 操作系统的亚马逊 EC2 实例:

    • 适用于 Windows 的 AWS CloudHSM 客户端软件。

    • Internet Information Services (IIS) for Windows Server。

  • 一个加密用户(CU),该用户拥有和管理 HSM 上的 Web 服务器的私有密钥。

注意

本教程使用微软 Windows Server 2019。还支持微软 Windows Server 2016 和 2022。

在 HSM 上设置 Windows Server 实例并创建 CU
  1. 完成入门中的步骤。当你启动亚马逊 EC2 客户端时,请选择 Windows Server 2019 AMI。完成这些步骤后,您有一个至少包含一个 HSM 的活动集群。你还有一个运行 Windows 服务器的亚马逊 EC2 客户端实例,其中安装了 Windows AWS CloudHSM 客户端软件。

  2. (可选) HSMs 向您的集群添加更多内容。有关更多信息,请参阅 HSM向 AWS CloudHSM 集群添加

  3. 连接到您的 Windows Server。有关更多信息,请参阅 Amazon EC2 用户指南中的 Connect 到您的实例

  4. 使用 CloudHSM CLI 创建加密用户(CU)。跟踪 CU 用户名和密码。您需要这些信息才能完成下一步。

    注意

    有关创建用户的信息,请参阅使用 CloudHSM CLI 管理 HSM 用户

  5. 使用您在上一步中创建的 CU 用户名和密码设置 HSM 的登录凭证

  6. 在步骤 5 中,如果您使用 Windows 凭据管理器设置 HSM 凭据,请psexec.exe从下载并以 NT Auth SysInternals ority\ SYST EM 的身份运行以下命令:

    psexec.exe -s "C:\Program Files\Amazon\CloudHsm\tools\set_cloudhsm_credentials.exe" --username <USERNAME> --password <PASSWORD>

    用 HSM 凭证替换<USERNAME><PASSWORD>

在您的 Windows Server 上安装 IIS
  1. 如果您尚未完成此操作,请连接到您的 Windows 服务器。有关更多信息,请参阅 Amazon EC2 用户指南中的 Connect 到您的实例

  2. 在 Windows 服务器上,启动服务器管理器

  3. 服务器管理器控制面板中,选择添加角色和功能

  4. 阅读开始之前信息,然后选择下一步

  5. 对于安装类型,选择基于角色或基于功能的安装。然后选择下一步

  6. 对于服务器选择,选择从服务器池中选择服务器。然后选择下一步

  7. 对于服务器角色,请执行以下操作:

    1. 选择 Web 服务器(IIS)

    2. 对于添加 Web Server (IIS) 所需的功能,选择添加功能

    3. 选择下一步完成选择服务器角色。

  8. 对于功能,接受默认值。然后选择下一步

  9. 阅读 Web 服务器角色(IIS) 信息。然后选择下一步

  10. 对于选择角色服务,接受默认值或根据偏好更改设置。然后选择下一步

  11. 对于确认,阅读确认信息。然后选择安装

  12. 安装完成后,选择关闭

完成这些步骤后,请转到 步骤 2:创建证书签名请求 (CSR) 和证书

客户端软件开发工具包 3 的先决条件

要使用设置 Web 服务器 SSL/TLS 卸载 AWS CloudHSM,您需要满足以下条件:

  • 至少有一个 HSM 的活动 AWS CloudHSM 集群。

  • 运行安装了以下软件的 Windows 操作系统的亚马逊 EC2 实例:

    • 适用于 Windows 的 AWS CloudHSM 客户端软件。

    • Internet Information Services (IIS) for Windows Server。

  • 一个加密用户(CU),该用户拥有和管理 HSM 上的 Web 服务器的私有密钥。

注意

本教程使用的是 Microsoft Windows Server 2016。还支持 Microsoft Windows Server 2012,但不支持 Microsoft Windows Server 2012 R2。

在 HSM 上设置 Windows Server 实例并创建 CU
  1. 完成入门中的步骤。当你启动亚马逊 EC2 客户端时,选择 Windows Server 2016 或 Windows Server 2012 AMI。完成这些步骤后,您有一个至少包含一个 HSM 的活动集群。你还有一个运行 Windows 服务器的亚马逊 EC2 客户端实例,其中安装了 Windows AWS CloudHSM 客户端软件。

  2. (可选) HSMs 向您的集群添加更多内容。有关更多信息,请参阅 HSM向 AWS CloudHSM 集群添加

  3. 连接到您的 Windows Server。有关更多信息,请参阅 Amazon EC2 用户指南中的 Connect 到您的实例

  4. 使用 CloudHSM CLI 创建加密用户(CU)。跟踪 CU 用户名和密码。您需要这些信息才能完成下一步。

    注意

    有关创建用户的信息,请参阅使用 CloudHSM CLI 管理 HSM 用户

  5. 使用您在上一步中创建的 CU 用户名和密码设置 HSM 的登录凭证

  6. 在步骤 5 中,如果您使用 Windows 凭据管理器设置 HSM 凭据,请psexec.exe从下载并以 NT Auth SysInternals ority\ SYST EM 的身份运行以下命令:

    psexec.exe -s "C:\Program Files\Amazon\CloudHsm\tools\set_cloudhsm_credentials.exe" --username <USERNAME> --password <PASSWORD>

    用 HSM 凭证替换<USERNAME><PASSWORD>

在您的 Windows Server 上安装 IIS
  1. 如果您尚未完成此操作,请连接到您的 Windows 服务器。有关更多信息,请参阅 Amazon EC2 用户指南中的 Connect 到您的实例

  2. 在 Windows 服务器上,启动服务器管理器

  3. 服务器管理器控制面板中,选择添加角色和功能

  4. 阅读开始之前信息,然后选择下一步

  5. 对于安装类型,选择基于角色或基于功能的安装。然后选择下一步

  6. 对于服务器选择,选择从服务器池中选择服务器。然后选择下一步

  7. 对于服务器角色,请执行以下操作:

    1. 选择 Web 服务器(IIS)

    2. 对于添加 Web Server (IIS) 所需的功能,选择添加功能

    3. 选择下一步完成选择服务器角色。

  8. 对于功能,接受默认值。然后选择下一步

  9. 阅读 Web 服务器角色(IIS) 信息。然后选择下一步

  10. 对于选择角色服务,接受默认值或根据偏好更改设置。然后选择下一步

  11. 对于确认,阅读确认信息。然后选择安装

  12. 安装完成后,选择关闭

完成这些步骤后,请转到 步骤 2:创建证书签名请求 (CSR) 和证书

步骤 2:创建证书签名请求 (CSR) 和证书

要启用 HTTPS,您的 Web 服务器需要SSL/TLS certificate and a corresponding private key. To use SSL/TLS卸载 AWS CloudHSM,您可以将私钥存储在集群的 HSM 中。 AWS CloudHSM 为此,您可使用适用于 Microsoft 的加密 API:下一代 (CNG) 的AWS CloudHSM 密钥存储提供程序 (KSP) 来创建证书签名请求 (CSR)。然后,您向证书颁发机构 (CA) 提供 CSR,该机构负责签署 CSR 以生成证书。

使用客户端 SDK 创建 CSR 5

  1. 在您的 Windows Server 上,使用文本编辑器创建一个名为 IISCertRequest.inf 的证书请求文件。以下显示了示例 IISCertRequest.inf 文件的内容。有关可在文件中指定的各部分、键和值,请参阅 Microsoft 的文档。请勿更改 ProviderName 值。

    [Version] Signature = "$Windows NT$" [NewRequest] Subject = "CN=example.com,C=US,ST=Washington,L=Seattle,O=ExampleOrg,OU=WebServer" HashAlgorithm = SHA256 KeyAlgorithm = RSA KeyLength = 2048 ProviderName = "CloudHSM Key Storage Provider" KeyUsage = 0xf0 MachineKeySet = True [EnhancedKeyUsageExtension] OID=1.3.6.1.5.5.7.3.1
  2. 使用 Windows certreq 命令根据您在上一步中创建IISCertRequest.inf的文件创建 CSR。以下示例将 CSR 保存至名为 IISCertRequest.csr 的文件。如果您为证书申请文件使用了不同的文件名,请IISCertRequest.inf替换为相应的文件名。您可以选择将 CSR 文件IISCertRequest.csr替换为不同的文件名。

    C:\>certreq -new IISCertRequest.inf IISCertRequest.csr CertReq: Request Created

    IISCertRequest.csr 文件包含您的 CSR。您需要此 CSR 才能获取签名证书。

使用客户端 SDK 创建 CSR 3

  1. 如果您尚未完成此操作,请连接到您的 Windows 服务器。有关更多信息,请参阅 Amazon EC2 用户指南中的 Connect 到您的实例

  2. 使用以下命令启动 AWS CloudHSM 客户端守护程序。

    Amazon Linux
    $ sudo start cloudhsm-client
    Amazon Linux 2
    $ sudo service cloudhsm-client start
    CentOS 7
    $ sudo service cloudhsm-client start
    CentOS 8
    $ sudo service cloudhsm-client start
    RHEL 7
    $ sudo service cloudhsm-client start
    RHEL 8
    $ sudo service cloudhsm-client start
    Ubuntu 16.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 18.04 LTS
    $ sudo service cloudhsm-client start
    Windows
    • 对于 Windows 客户端 1.1.2 以上版本:

      C:\Program Files\Amazon\CloudHSM>net.exe start AWSCloudHSMClient
    • 对于 Windows 客户端 1.1.1 及更低版本:

      C:\Program Files\Amazon\CloudHSM>start "cloudhsm_client" cloudhsm_client.exe C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_client.cfg
  3. 在您的 Windows Server 上,使用文本编辑器创建一个名为 IISCertRequest.inf 的证书请求文件。以下显示了示例 IISCertRequest.inf 文件的内容。有关可在文件中指定的各部分、键和值,请参阅 Microsoft 的文档。请勿更改 ProviderName 值。

    [Version] Signature = "$Windows NT$" [NewRequest] Subject = "CN=example.com,C=US,ST=Washington,L=Seattle,O=ExampleOrg,OU=WebServer" HashAlgorithm = SHA256 KeyAlgorithm = RSA KeyLength = 2048 ProviderName = "Cavium Key Storage Provider" KeyUsage = 0xf0 MachineKeySet = True [EnhancedKeyUsageExtension] OID=1.3.6.1.5.5.7.3.1
  4. 使用 Windows certreq 命令根据您在上一步中创建IISCertRequest.inf的文件创建 CSR。以下示例将 CSR 保存至名为 IISCertRequest.csr 的文件。如果您为证书申请文件使用了不同的文件名,请IISCertRequest.inf替换为相应的文件名。您可以选择将 CSR 文件IISCertRequest.csr替换为不同的文件名。

    C:\>certreq -new IISCertRequest.inf IISCertRequest.csr SDK Version: 2.03 CertReq: Request Created

    IISCertRequest.csr 文件包含您的 CSR。您需要此 CSR 才能获取签名证书。

获取签名证书并导入

在生产环境中,您通常使用证书颁发机构 (CA) 通过 CSR 创建证书。测试环境无需 CA。如果您确实使用了一个 CA,请向它发送 CSR 文件 (IISCertRequest.csr) 并使用该 CA 创建已签名的 SSL/TLS 证书。

作为使用 CA 的替代方案,您可以使用 OpenSSL 等工具创建自签名证书。

警告

自签名证书不受浏览器的信任,不应在生产环境中使用。它们可在测试环境中使用。

以下过程演示了如何创建自签名证书并使用该证书来签署您的 Web 服务器的 CSR。

创建自签名证书
  1. 使用以下 OpenSSL 命令创建私有密钥。您可以选择SelfSignedCA.key用文件名替换以包含您的私钥。

    openssl genrsa -aes256 -out SelfSignedCA.key 2048 Generating RSA private key, 2048 bit long modulus ......................................................................+++ .........................................+++ e is 65537 (0x10001) Enter pass phrase for SelfSignedCA.key: Verifying - Enter pass phrase for SelfSignedCA.key:
  2. 使用以下 OpenSSL 命令,通过您在上一步中创建的私有密钥创建自签名证书。这是一个交互式命令。阅读屏幕上的说明,并按照提示操作。SelfSignedCA.key替换为包含您的私钥的文件的名称(如果不同)。您可以选择SelfSignedCA.crt用文件名替换,以包含您的自签名证书。

    openssl req -new -x509 -days 365 -key SelfSignedCA.key -out SelfSignedCA.crt Enter pass phrase for SelfSignedCA.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []:
使用您的自签名证书签署 Web 服务器的 CSR
  • 使用以下 OpenSSL 命令,通过您的私有密钥和自签名证书签署 CSR。将以下文件替换为包含相应数据的文件的名称(如果不同)。

    • IISCertRequest.csr— 包含您的 Web 服务器的 CSR 的文件的名称

    • SelfSignedCA.crt— 包含您的自签名证书的文件的名称

    • SelfSignedCA.key— 包含您的私钥的文件的名称

    • IISCert.crt— 包含您的 Web 服务器签名证书的文件的名称

    openssl x509 -req -days 365 -in IISCertRequest.csr \ -CA SelfSignedCA.crt \ -CAkey SelfSignedCA.key \ -CAcreateserial \ -out IISCert.crt Signature ok subject=/ST=IIS-HSM/L=IIS-HSM/OU=IIS-HSM/O=IIS-HSM/CN=IIS-HSM/C=IIS-HSM Getting CA Private Key Enter pass phrase for SelfSignedCA.key:

在完成上一步后,您会有一个用于 Web 服务器的签名证书 (IISCert.crt) 和一个自签名证书 (SelfSignedCA.crt)。在具有这些文件后,请转到步骤 3:配置 Web 服务器

步骤 3:配置 Web 服务器

将您的 IIS 网站的配置更新为使用在上一步结束时创建的 HTTPS 证书。这将完成 Windows Web 服务器软件 (IIS) 的设置,以便借助 AWS CloudHSM进行 SSL/TLS 分载。

如果您使用了自签名证书签署 CSR,则必须首先将自签名证书导入 Windows 受信任的根证书颁发机构。

将您的自签名证书导入 Windows 受信任的根证书颁发机构
  1. 如果您尚未完成此操作,请连接到您的 Windows 服务器。有关更多信息,请参阅 Amazon EC2 用户指南中的 Connect 到您的实例

  2. 将您的自签名证书复制到 Windows Server。

  3. 在 Windows Server 上,打开 Control Panel (控制面板)

  4. 对于搜索控制面板,键入 certificates。然后选择管理计算机证书

  5. 在 “证书-本地计算机” 窗口中,双击 “受信任的根证书颁发机构”。

  6. 右键单击证书,然后选择所有任务导入

  7. 证书导入向导 中,选择下一步

  8. 选择浏览,然后找到并选择您的自签名证书。如果按照本教程的上一步中的说明创建了您的自签名证书,则您的自签名证书将命名为 SelfSignedCA.crt。选择打开

  9. 选择下一步

  10. 对于证书存储,选择将所有证书置于以下存储中。然后,确保针对证书存储选中受信任的根证书颁发机构

  11. 选择下一步,然后选择完成

更新 IIS 网站的配置
  1. 如果您尚未完成此操作,请连接到您的 Windows 服务器。有关更多信息,请参阅 Amazon EC2 用户指南中的 Connect 到您的实例

  2. 启动 AWS CloudHSM 客户端守护程序。

  3. 将您在本教程的上一步中创建的 Web 服务器的签名证书复制到您的 Windows 服务器。

  4. 在你的 Windows 服务器上,使用 Windows certreq 命令接受签名的证书,如以下示例所示。IISCert.crt替换为包含 Web 服务器签名证书的文件名。

    C:\>certreq -accept IISCert.crt SDK Version: 2.03
  5. 在 Windows 服务器上,启动服务器管理器

  6. 服务器管理器控制面板的右上角,选择工具Internet Information Services (IIS)管理器

  7. Internet Information Services (IIS)管理器窗口中,双击您的服务器名称。然后双击网站。选择您的网站。

  8. 选择 SSL 设置。然后,在窗口左侧选择绑定

  9. 网站绑定 窗口中,选择添加

  10. 对于类型,选择 https。对于 SSL 证书,选择您在本教程的上一步结束时创建的 HTTPS 证书。

    注意

    如果您在该绑定证书的过程中遇到错误,请重新启动服务器并重试此步骤。

  11. 选择确定

在更新您的网站配置后,请转到步骤 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 创建安全组并将其分配给您的网络服务器
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择安全组

  3. 选择创建安全组

  4. 对于创建安全组,执行以下操作:

    1. 对于安全组名称,键入您要创建的安全组的名称。

    2. (可选) 键入对您要创建的安全组的描述。

    3. 对于 VPC,请选择包含您的网络服务器 Amazon EC2 实例的 VPC。

    4. 选择添加规则

    5. 对于类型,从下拉窗口中选择 HTTPS

    6. 对于来源,输入来源位置。

    7. 选择创建安全组

  5. 在导航窗格中,选择实例

  6. 选中您的 Web 服务器实例旁边的复选框。

  7. 在页面顶部选择操作下拉菜单。选择安全,然后选择更改安全组

  8. 对于关联安全组,请选择搜索框,然后选择您为 HTTPS 创建的安全组。然后选择添加安全组

  9. 选择保存

验证 HTTPS 使用的是您已配置的证书

将 Web 服务器添加到安全组后,您可以验证 SSL/TLS 卸载是否正在使用您的自签名证书。您可以使用网络浏览器或使用工具 (如 OpenSSL s_client) 执行此操作。

使用网络浏览器验证 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/)路由到您的网络服务器。有关更多信息,请参阅 Amazon R oute 53 开发者指南或您的 DNS 服务文档中的将流量路由到亚马逊 EC2实例

  2. 使用您的 Web 浏览器查看 Web 服务器证书。有关更多信息,请参阅下列内容:

    • 对于 Mozilla Firefox,请参阅 Mozilla Support 网站上的查看证书

    • 关于 Google Chrome 浏览器,请参阅 Google Tools for Web Developers 网站上的了解安全问题

    其他网络浏览器可能具有相似的功能,可使用这些功能来查看网络服务器证书。

  3. 确保 SSL/TLS 证书是您配置 Web 服务器使用的证书。

使用 OpenSSL s_client 验证 SSL/TLS 分载
  1. 运行以下 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实例

  2. 确保 SSL/TLS 证书是您配置 Web 服务器使用的证书。

您现在有一个通过 HTTPS 保护的网站。Web 服务器的私钥存储在 AWS CloudHSM 集群的 HSM 中。

若要添加负载均衡器,请参阅 使用 Elastic Load Balancing 为 AWS CloudHSM 添加负载均衡器(可选)