

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

# 使用 SSL
<a name="workingsecurity-ssl"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

要对您的应用程序使用 SSL，必须首先获取证书颁发机构 (CA) 签发的数字服务器证书。为简单起见，本演练将创建一个证书，然后自行签署该证书。自签名证书可用于学习和测试目的，但您应始终为生产堆栈使用由 CA 签署的证书。

在本演示中，您将执行以下操作：

1. 安装和配置 OpenSSL。

1. 创建私有密钥。

1. 创建证书签名请求。

1. 生成自签名证书。

1. 用您的证书信息编辑应用程序。

**重要**  
如果您的应用程序使用 SSL，我们建议您在可能的情况下在应用程序服务器层中禁用 SSLv3，以解决 [CVE-2014-3566](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2014-3566) 中描述的漏洞。如果您的堆栈包含一个 Ganglia 层，您也应该为该层禁用 SSL v3。详细信息取决于特定层；有关更多信息，请参阅以下内容。  
[Java 应用服务器 OpsWorks 堆栈层](layers-java.md)
[Node.js 应用服务器 OpsWorks 堆栈层](workinglayers-node.md)
[PHP 应用服务器 OpsWorks 堆栈层](workinglayers-php.md)
[Rails 应用程序服务器 OpsWorks 堆栈层](workinglayers-rails.md)
[静态 Web 服务器 OpsWorks 堆栈层](workinglayers-static.md)
[Ganglia 层](workinglayers-ganglia.md)

**Topics**
+ [步骤 1：安装和配置 OpenSSL](#w2ab1c14c57c29c15)
+ [步骤 2：创建私有密钥](#w2ab1c14c57c29c17)
+ [步骤 3：创建证书签名请求](#w2ab1c14c57c29c19)
+ [步骤 4：将 CSR 提交给证书颁发机构](#w2ab1c14c57c29c21)
+ [步骤 5：编辑应用程序](#w2ab1c14c57c29c23)

## 步骤 1：安装和配置 OpenSSL
<a name="w2ab1c14c57c29c15"></a>

创建和上传服务器证书时，需要使用支持 SSL 和 TLS 协议的工具。OpenSSL 是一种开源工具，提供创建 RSA 令牌以及使用私有密钥进行签名所需的基本加密功能。

 以下步骤假定您的计算机上还没有安装 OpenSSL。

**在 Linux 和 Unix 系统上安装 OpenSSL**

1. 请访问 [OpenSSL：源、Tarball](https://www.openssl.org/source/)。

1. 下载最新源。

1. 构建软件包。

**如要在 Windows 系统上安装 OpenSSL**

1. 如果您的系统上尚未安装 Microsoft Visual C\$1\$1 2008 Redistributable Package，下载该[软件包](https://www.microsoft.com/en-us/download/details.aspx?id=11895)。

1. 运行安装程序并按照 Microsoft Visual C\$1\$1 2008 Redistributable Setup Wizard 提供的说明来安装可重新分发软件。

1. 转到 [OpenSSL: Binary Distributions](https://www.openssl.org/community/binaries.html)，单击您的环境所适用的 OpenSSL 二进制文件版本，然后在本地保存安装程序。

1. 运行安装程序，然后按照 **OpenSSL Setup Wizard** 中的说明来安装二进制文件。

创建指向 OpenSSL 安装点的环境变量，方法是打开一个终端窗口或命令窗口，然后使用以下命令行。
+ 在 Linux 和 Unix 上

  ```
  export OpenSSL_HOME=path_to_your_OpenSSL_installation
  ```
+ 在 Windows 上

  ```
  set OpenSSL_HOME=path_to_your_OpenSSL_installation 
  ```

将 OpenSSL 二进制文件的路径添加到计算机的路径变量，方法是打开一个终端窗口或命令窗口，然后使用以下命令行。
+ 在 Linux 和 Unix 上

  ```
  export PATH=$PATH:$OpenSSL_HOME/bin 
  ```
+ 在 Windows 上

  ```
  set Path=OpenSSL_HOME\bin;%Path% 
  ```

**注意**  
通过使用这些命令行对环境变量所做的任何更改只对当前的命令行会话有效。

## 步骤 2：创建私有密钥
<a name="w2ab1c14c57c29c17"></a>

您需要使用一个唯一的私有密钥创建证书签名请求 (CSR)。通过使用以下命令行创建密钥：

```
openssl genrsa 2048 > privatekey.pem
```

## 步骤 3：创建证书签名请求
<a name="w2ab1c14c57c29c19"></a>

证书签名请求 (CSR) 是发送到证书颁发机构 (CA) 的文件，用于申请数字服务器证书。通过使用以下命令行创建 CSR。

```
openssl req -new -key privatekey.pem -out csr.pem
```

命令的输出与以下内容类似：

```
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.
```

下表可帮助您创建证书请求。


**证书请求数据**  

| Name | 说明 | 示例 | 
| --- | --- | --- | 
| 国家/地区名称 | 代表国家/地区的两个字母 ISO 缩写。 | US = 美国 | 
| 州或省 | 组织所在州或省的名称。此名称不可使用缩写。 | Washington | 
| 所在地名称 | 组织所在城市的名称。 | Seattle | 
| 组织名称 | 组织的法定全称。请勿缩写组织名称。 | CorporationX | 
| 组织部门 | (可选) 用于获取额外组织信息。 | 市场营销 | 
| 公用名 | 别名记录的完全限定域名。如果两者不能精确匹配，那么您会收到一条证书名称检测警告。 | www.example.com | 
| 电子邮件地址 | 服务器管理员的电子邮件地址 | someone@example.com | 

**注意**  
通常情况下，“Common Name”字段很容易出现误解，也不容易填写正确。公用名通常指的是您的主机加上域名。它会采取类似“www.example.com”或“example.com”的形式。您需要使用正确的公用名创建 CSR。

## 步骤 4：将 CSR 提交给证书颁发机构
<a name="w2ab1c14c57c29c21"></a>

在实际生产使用中，您可以通过将 CSR 提交给证书颁发机构 (CA) 来获取服务器证书，这可能要求提供其他证书或身份证明。如果您的应用程序成功，则 CA 将返回带有数字签名的身份证书，并可能返回一个证书链文件。AWS 不建议特定的 CA。有关可用的部分列表 CAs，请参阅维基百科上的[证书颁发机构-提供商](https://en.wikipedia.org/wiki/Certificate_authority#Providers)。

您也可以生成自签名证书，该证书仅可用于测试目的。对于本示例，请使用以下命令行来生成自签名证书。

```
openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out server.crt
```

输出将类似如下：

```
Loading 'screen' into random state - done
Signature ok
subject=/C=us/ST=washington/L=seattle/O=corporationx/OU=marketing/CN=example.com/emailAddress=someone@example.com
Getting Private key
```

## 步骤 5：编辑应用程序
<a name="w2ab1c14c57c29c23"></a>

在生成您的证书并签名后，请更新您的应用程序以启用 SSL 并提供您的证书信息。在 **Apps (应用程序)** 页面上，选择一个应用程序以打开详细信息页面，然后单击 **Edit App (编辑应用程序)**。要启用 SSL 支持，请将 **Enable SSL (启用 SSL)** 设置为 **Yes (是)**，这将显示以下配置选项。

**SSL 证书**  
将公有密钥证书文件 (.crt) 的内容粘贴到相应的输入框。证书应与以下内容类似：  

```
-----BEGIN CERTIFICATE-----
MIICuTCCAiICCQCtqFKItVQJpzANBgkqhkiG9w0BAQUFADCBoDELMAkGA1UEBhMC
dXMxEzARBgNVBAgMCndhc2hpbmd0b24xEDAOBgNVBAcMB3NlYXR0bGUxDzANBgNV
BAoMBmFtYXpvbjEWMBQGA1UECwwNRGV2IGFuZCBUb29sczEdMBsGA1UEAwwUc3Rl
cGhhbmllYXBpZXJjZS5jb20xIjAgBgkqhkiG9w0BCQEWE3NhcGllcmNlQGFtYXpv
...
-----END CERTIFICATE-----
```
如果您使用的是 Nginx 并且您拥有证书链文件，则应将内容追加到公有密钥证书文件中。
如果您要更新现有证书，请执行以下操作：  
+ 选择 **Update SSL certificate (更新 SSL 证书)** 以更新证书。
+ 如果新证书与现有私有密钥不匹配，请选择 **Update SSL certificate key (更新 SSL 证书密钥)**。
+ 如果新证书与现有证书链不匹配，请选择 **Update SSL certificates (更新 SSL 证书)**。

**SSL Certificate Key**  
将私有密钥文件 (.pem 文件) 的内容粘贴到相应的输入框。它应与以下内容类似：  

```
----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC0CYklJY5r4vV2NHQYEpwtsLuMMBhylMrgBShKq+HHVLYQQCL6
+wGIiRq5qXqZlRXje3GM5Jvcm6q0R71MfRIl1FuzKyqDtneZaAIEYniZibHiUnmO
/UNqpFDosw/6hY3ONk0fSBlU4ivD0Gjpf6J80jL3DJ4R23Ed0sdL4pRT3QIDAQAB
AoGBAKmMfWrNRqYVtGKgnWB6Tji9QrKQLMXjmHeGg95mppdJELiXHhpMvrHtpIyK
...
-----END RSA PRIVATE KEY-----
```

**SSL certificates of Certification Authorities**  
如果您拥有证书链文件，请将内容粘贴到相应的输入框中。  
如果您使用的是 Nginx，则应将此框留为空。如果您拥有证书链文件，请将其附加到 **SSL Certificate (SSL 证书)** 中的公有密钥证书文件。

![\[SSL Settings interface with options for SSL 支持, Certificate, Key, and Certification Authorities.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/app_ssl_settings.png)


单击 **Save** 后，[重新部署应用程序](workingapps-deploying.md)以更新您的联机实例。

对于[内置的应用程序服务器层](workingcookbook-json.md#workingcookbook-json-deploy)， OpsWorks Stacks 会自动更新服务器配置。部署完成后，您可以验证 OpenSSL 安装是否正确，如下所示。

**验证 OpenSSL 安装**

1. 转至 **Instances** 页面。

1. 通过单击应用程序服务器实例的 IP 地址来运行应用程序，或者如果您使用的是负载均衡器，也可以单击负载均衡器的 IP 地址来运行应用程序。

1. 将 IP 地址前缀从 **http://** 更改为 **https://**，然后刷新浏览器以验证页面是否使用 SSL 正确加载。

已配置应用程序要在 Mozilla Firefox 中运行的用户有时会收到以下证书错误：`SEC_ERROR_UNKNOWN_ISSUER`。此错误可能是由您组织的防病毒和反恶意软件程序中的证书替换功能、某些类型的网络流量监控和过滤软件或恶意软件导致的。有关如何解决此错误的更多信息，请参阅 Mozilla Firefox 支持网站上的[如何对安全网站上的安全错误代码进行故障排除](https://support.mozilla.org/en-US/kb/error-codes-secure-websites?redirectlocale=en-US&redirectslug=troubleshoot-SEC_ERROR_UNKNOWN_ISSUER#w_monitoringfiltering-in-corporate-networks)。

对于包括自定义层在内的所有其他层， OpsWorks Stacks 直接将 SSL 设置添加到应用程序的 [`deploy` 属性](workingcookbook-json.md#workingcookbook-json-deploy)。您必须实施自定义配方从节点对象中检索信息并正确配置服务器。