

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

# 服务器证书
<a name="configuring-https.certificate"></a>

本主题介绍可用于配置 HTTPS 的不同类型的证书以及何时应用每种证书。本节中的子主题提供了有关创建您自己的证书以及如何上传它的说明。

**AWS Certificate Manager (ACM)**  
ACM 是预置、管理和部署您的服务器证书的首选工具。您可以通过编程或使用. AWS CLI使用 ACM，您可为自己的域名免费创建可信证书。

 ACM 证书只能用于 AWS 负载均衡器和 Amazon CloudFront 分配，而且 ACM 仅在某些地区可用。 AWS 要将 ACM 证书与 Elastic Beanstalk 结合使用，请参阅[在负载均衡器上配置 HTTPS 终止](configuring-https-elb.md)。有关 ACM 的更多信息，请参阅《[https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)》。

**注意**  
 有关可使用 ACM 的区域列表，请参阅 *Amazon Web Services 一般参考* 中的 [ACM endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/acm.html)。

如果 ACM 在您 AWS 所在的地区不可用，您可以将第三方或自签名证书和私钥上传到 AWS Identity and Access Management (IAM)。您可以使用 AWS CLI 上传证书。存储在 IAM 中的证书可用于负载均衡器和 CloudFront 分配。有关更多信息，请参阅 [上传证书至 IAM](configuring-https-ssl-upload.md)。

**第三方证书**  
如果 ACM 在您所在的区域不可用，您可从第三方购买的可信证书。第三方证书可用于在负载均衡器、后端实例或负载均衡器及后端实例上解密 HTTPS 流量。

**自签名证书**  
对于开发和测试，您可使用开源工具自行[创建和签署证书](configuring-https-ssl.md)。自签名证书可免费轻松创建，但无法用于公共站点的前端解密。如果您试图通过客户端为 HTTPS 连接使用自签名证书，用户的浏览器将会显示错误消息，表示网站不安全。但您可使用自签名证书来确保后端连接，不会出现问题。

# 创建和签名 X509 证书
<a name="configuring-https-ssl"></a>

您可以使用 `OpenSSL` 为应用程序创建 X509 证书。OpenSSL 一种支持广泛加密功能的标准开源库，其功能包括创建和签名 X509 证书。有关 OpenSSL 的更多信息，请访问 [www.openssl.org/](https://www.openssl.org/)。

**注意**  
如果要[在单实例环境中使用 HTTPS](https-singleinstance.md) 或使用自签名证书[在后端上重新加密](configuring-https-endtoend.md)，您只需在本地创建证书。如果您拥有域名，则可以使用 AWS Certificate Manager (ACM) 在中创建证书 AWS 并免费将其用于负载平衡的环境。有关说明，请参阅 *AWS Certificate Manager 用户指南*中的[请求证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)。

在命令行运行 `openssl version`，查看是否已安装 OpenSSL。如果你不这样做，你可以按照[公共 GitHub 存储库](https://github.com/openssl/openssl)中的说明来构建和安装源代码，或者使用你最喜欢的包管理器。[OpenSSL 也安装在 Elastic Beanstalk 的 Linux 映像上，因此一种快速的替代方法是使用 EB CLI 的命令连接到运行环境中的 EC2 实例：](eb-cli3.md)**eb ssh**

```
~/eb$ eb ssh
[ec2-user@ip-255-55-55-255 ~]$ openssl version
OpenSSL 1.0.1k-fips 8 Jan 2015
```

您需要创建 RSA 私有密钥才能创建证书签名请求 (CSR)。要创建私有密钥，请使用 **openssl genrsa** 命令：

```
[ec2-user@ip-255-55-55-255 ~]$ openssl genrsa 2048 > privatekey.pem
Generating RSA private key, 2048 bit long modulus
.................................................................................................................................+++
...............+++
e is 65537 (0x10001)
```

*privatekey.pem*  
要用于保存私有密钥的文件的名称。通常，**openssl genrsa** 命令将私有密钥内容输出到屏幕，但此命令将输出通过管道传送到文件。选择任何文件名，并将文件存储在安全位置，以便您以后可以检索它。如果您丢失私有密钥，则无法使用您的证书。

CSR 是指您为申请数字服务器证书而发送至证书颁发机构 (CA) 的文件。要创建 CSR，请使用 **openssl req** 命令：

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

输入所请求的信息并按 **Enter**。下表描述并显示每个字段的示例。


****  

| Name | 说明 | 示例 | 
| --- | --- | --- | 
| 国家/地区名称 | 代表国家/地区的两个字母 ISO 缩写。 | US = 美国 | 
| 州或省 | 组织所在州或省的名称。不能缩写此名称。 | Washington | 
| 所在地名称 | 组织所在城市的名称。 | Seattle | 
| 组织名称 | 组织的法定全称。请勿缩写组织名称。 | Example Corporation | 
| 组织部门 | 可选，用于提供额外的组织信息。 | 市场营销 | 
| 公用名 | 网站的完全限定域名。这必须与用户访问站点时看到的域名相符，否则将显示证书错误。 | www.example.com | 
| 电子邮件地址 | 站点管理员的电子邮件地址。 | someone@example.com | 

您可向第三方提交签名请求以供签名，或自行签名以供开发和测试。自签名证书也可用于负载均衡器和 EC2 实例之间的后端 HTTPS。

要对证书进行签名，请使用 **openssl x509** 命令。以下示例使用上一步中的私钥 (*privatekey.pem*) 和签名请求 (*csr.pem*) 来创建有效期为*365*数天的名*public.crt*为的公有证书。

```
$ openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out public.crt
Signature ok
subject=/C=us/ST=washington/L=seattle/O=example corporation/OU=marketing/CN=www.example.com/emailAddress=someone@example.com
Getting Private key
```

保存私钥和公有证书以待将来使用。您可放弃签名请求。请始终[将私有密钥存储在安全位置](https-storingprivatekeys.md)并避免将其添加到源代码。

要将证书用于 Windows Server 平台，您必须将证书转换为 PFX 格式。使用以下命令可在私有密钥和公有证书文件中创建 PFX 证书：

```
$ openssl pkcs12 -export -out example.com.pfx -inkey privatekey.pem -in public.crt
Enter Export Password: password
Verifying - Enter Export Password: password
```

既然您已经拥有了证书，您可以[将其上传到 IAM](configuring-https-ssl-upload.md)以与负载均衡器结合使用，或者[在您的环境中配置实例以终止 HTTPS](https-singleinstance.md)。

# 上传证书至 IAM
<a name="configuring-https-ssl-upload"></a>

要将您的证书与 Elastic Beanstalk 环境的负载均衡器配合使用，请将证书和私 AWS Identity and Access Management 钥上传到 (IAM)。您可以将存储在 IAM 中的证书与 Elastic Load Balancing 负载均衡器和亚马逊 CloudFront 分配配合使用。

**注意**  
AWS Certificate Manager (ACM) 是预置、管理和部署服务器证书的首选工具。有关请求 ACM 证书的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[请求证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)。有关将第三方证书导入 ACM 中的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。只有在[您所在的 AWS 地区没有 ACM 时，才使用](https://docs.aws.amazon.com/general/latest/gr/acm.html) IAM 上传证书。

您可以使用 AWS Command Line Interface (AWS CLI) 上传您的证书。以下命令上传名为的自签名证书，*https-cert.crt*其私钥名为：*private-key.pem*

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-body file://https-cert.crt --private-key file://private-key.pem
{
    "ServerCertificateMetadata": {
        "ServerCertificateId": "AS5YBEIONO2Q7CAIHKNGC",
        "ServerCertificateName": "elastic-beanstalk-x509",
        "Expiration": "2017-01-31T23:06:22Z",
        "Path": "/",
        "Arn": "arn:aws:iam::123456789012:server-certificate/elastic-beanstalk-x509",
        "UploadDate": "2016-02-01T23:10:34.167Z"
    }
}
```

前`file://`缀告诉 AWS CLI 将文件内容加载到当前目录中。 *elastic-beanstalk-x509*指定在 IAM 中调用证书的名称。

如果您已从证书颁发机构购买了证书并已收到证书链文件，请包括 `--certificate-chain` 选项，将证书链文件同样上传：

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-chain file://certificate-chain.pem --certificate-body file://https-cert.crt --private-key file://private-key.pem
```

记下证书的 Amazon Resource Name (ARN)。当您更新负载均衡器配置设置以使用 HTTPS 时，您会使用它。

**注意**  
上传到 IAM 的证书保持存储状态，即使在任何环境的负载均衡器中不再使用它也如此。它包含敏感数据。当您对于任何环境都不再需要该证书时，请务必将其删除。有关从 IAM 中删除证书的详细信息，请参阅[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate)。

有关 IAM 中的服务器证书的更多信息，请参阅《*IAM 用户指南*》中的[使用服务器证书](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html)。

# 在 Amazon S3 中安全地存储私有密钥
<a name="https-storingprivatekeys"></a>

用于对公有证书签名的私有密钥是私有的，不应提交到源代码。通过将私有密钥上传到 Amazon S3，然后将 Elastic Beanstalk 配置为在应用程序部署期间从 Amazon S3 下载文件，可以避免将私有密钥存储在配置文件中。

以下示例显示了[配置文件](ebextensions.md)的[资源](environment-resources.md)和[文件](customize-containers-ec2.md#linux-files)部分，并从 Amazon S3 存储桶下载私有密钥文件。

**Example .ebextensions/privatekey.config**  

```
Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-west-2-123456789012"]
          roleName: 
            "Fn::GetOptionSetting": 
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
  # Private key
  "/etc/pki/tls/certs/server.key":
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://elasticbeanstalk-us-west-2-123456789012.s3.us-west-2.amazonaws.com/server.key
```

将示例中的存储桶名称和 URL 替换为您自己的。此文件中的第一个条目将名为 `S3Auth` 的身份验证方法添加到环境的 Auto Scaling 组的元数据中。如果您为环境配置了自定义[实例配置文件](concepts-roles-instance.md)，则将使用自定义实例配置文件，否则应用默认值 `aws-elasticbeanstalk-ec2-role`。默认实例配置文件具有从 Elastic Beanstalk 存储桶读取的权限。如果您使用不同的存储桶，请[向实例配置文件添加权限](iam-instanceprofile.md#iam-instanceprofile-addperms)。

第二个条目使用 `S3Auth` 身份验证方法从指定 URL 下载私有密钥并将其保存到 `/etc/pki/tls/certs/server.key`。然后，代理服务器可以从此位置读取私有密钥以[终止实例的 HTTPS 连接](https-singleinstance.md)。

分配给您的环境实例的 EC2 实例配置文件必须具有从指定存储桶读取密钥对象的权限。[验证实例配置文件有权](iam-instanceprofile.md#iam-instanceprofile-verify)读取 IAM 中的对象，并且存储桶和对象上的权限不禁止实例配置文件。

**查看存储桶的权限**

1. 打开 [Amazon S3 管理控制台](https://console.aws.amazon.com/s3/home)。

1. 选择存储桶。

1. 选择**属性**，然后选择**权限**。

1. 验证您的账户已被授予存储桶的读取权限。

1. 如果已附加存储桶策略，请选择**存储桶策略**以查看分配到存储桶的权限。