

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

# 更新经典负载均衡器的 SSL 协商配置
<a name="ssl-config-update"></a>

经典负载均衡器提供了具有预定义 SSL 协商配置的安全策略，可使用这些配置协商客户端与负载均衡器之间的 SSL 连接。如果您为侦听器使用 HTTPS/SSL 协议，则可以使用预定义的安全策略之一，也可以使用自己的自定义安全策略。

有关安全策略的更多信息，请参阅[经典负载均衡器的 SSL 协商配置](elb-ssl-security-policy.md)。如需了解 Elastic Load Balancing 提供的安全策略的配置，请参阅[经典负载均衡器的预定义 SSL 安全策略](elb-security-policy-table.md)。

如果您在不关联安全策略的情况下创建 HTTPS/SSL 侦听器，Elastic Load Balancing 会将默认的预定义安全策略与您的负载均衡器关联起来。`ELBSecurityPolicy-2016-08`

如果您愿意，可创建一个自定义配置。强烈建议您先测试安全策略，然后再升级负载均衡器配置。

以下示例说明如何更新 HTTPS/SSL 监听器的 SSL 协商配置。请注意，更改不影响由负载均衡器节点接收并等待路由到运行正常的实例的请求，但是更新的配置将用于接收的新请求。

**Topics**
+ [使用控制台更新 SSL 协商配置](#ssl-config-update-console)
+ [使用更新 SSL 协商配置 Amazon CLI](#ssl-config-update-cli)

## 使用控制台更新 SSL 协商配置
<a name="ssl-config-update-console"></a>

默认情况下，Elastic Load Balancing 将最新的预定义策略与您的负载均衡器关联。添加新的预定义策略后，建议您将负载均衡器更新为使用新的预定义策略。或者，您也可以选择其他预定义安全策略或创建自定义策略。

**使用控制台更新 HTTPS/SSL 负载均衡器的 SSL 协商配置**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格上的 **Load Balancing**（负载均衡）下，选择 **Load Balancers**（负载均衡器）。

1. 选择负载均衡器的名称以打开其详细信息页面。

1. 在**侦听器**选项卡上，选择**管理侦听器**。

1. 在**管理侦听器**页面上，找到要更新的侦听器，选择**安全策略**下的**编辑**，然后使用下面的任意一种选项选择安全策略：
   + 保留默认策略 P **ELBSecurityolicy-2016-08**，然后选择**保存**更改。
   + 选择除默认策略以外的预定义策略，然后选择**保存更改**。
   + 选择**自定义**，然后至少启用一项协议和一个密码，如下所示：

     1. 对于 **SSL Protocols**，选择要启用的一个或多个协议。

     1. 对于 **SSL 选项**，选择**服务器顺序首选项**，以便对 SSL 协商使用[经典负载均衡器的预定义 SSL 安全策略](elb-security-policy-table.md)中列出的顺序。

     1. 对于 **SSL Ciphers**，选择要启用的一个或多个密码。如果您已有一个 SSL 证书，则必须启用用于创建该证书的密码，因为 DSA 和 RSA 密码特定于签名算法。

     1. 选择**保存更改**。

## 使用更新 SSL 协商配置 Amazon CLI
<a name="ssl-config-update-cli"></a>

您可使用默认预定义安全策略 `ELBSecurityPolicy-2016-08`、其他预定义安全策略或自定义安全策略。

**使用预定义 SSL 安全策略**

1. 使用以下[describe-load-balancer-policies](https://docs.amazonaws.cn/cli/latest/reference/elb/describe-load-balancer-policies.html)命令列出 Elastic Load Balancing 提供的预定义安全策略。您可以使用的语法取决于您使用的操作系统和 Shell。

   **Linux**

   ```
   aws elb describe-load-balancer-policies --query 'PolicyDescriptions[?PolicyTypeName==`SSLNegotiationPolicyType`].{PolicyName:PolicyName}' --output table
   ```

   **Windows**

   ```
   aws elb describe-load-balancer-policies --query "PolicyDescriptions[?PolicyTypeName==`SSLNegotiationPolicyType`].{PolicyName:PolicyName}" --output table
   ```

   下面是示例输出：

   ```
   ------------------------------------------
   |      DescribeLoadBalancerPolicies      |
   +----------------------------------------+
   |               PolicyName               |
   +----------------------------------------+
   |  ELBSecurityPolicy-2016-08             |
   |  ELBSecurityPolicy-TLS-1-2-2017-01     |
   |  ELBSecurityPolicy-TLS-1-1-2017-01     |
   |  ELBSecurityPolicy-2015-05             |
   |  ELBSecurityPolicy-2015-03             |
   |  ELBSecurityPolicy-2015-02             |
   |  ELBSecurityPolicy-2014-10             |
   |  ELBSecurityPolicy-2014-01             |
   |  ELBSecurityPolicy-2011-08             |
   |  ELBSample-ELBDefaultCipherPolicy      |
   |  ELBSample-OpenSSLDefaultCipherPolicy  |
   +----------------------------------------+
   ```

   若要确定为策略启用的密码，请使用以下命令：

   ```
   aws elb describe-load-balancer-policies --policy-names ELBSecurityPolicy-2016-08 --output table
   ```

   有关预定义安全策略的配置的信息，请参阅[经典负载均衡器的预定义 SSL 安全策略](elb-security-policy-table.md)。

1. 使用[create-load-balancer-policy](https://docs.amazonaws.cn/cli/latest/reference/elb/create-load-balancer-policy.html)命令使用您在上一步中描述的预定义安全策略之一创建 SSL 协商策略。例如，以下命令使用默认预定义安全策略：

   ```
   aws elb create-load-balancer-policy --load-balancer-name my-loadbalancer
   --policy-name my-SSLNegotiation-policy  --policy-type-name SSLNegotiationPolicyType
   --policy-attributes AttributeName=Reference-Security-Policy,AttributeValue=ELBSecurityPolicy-2016-08
   ```

   如果您超出了负载均衡器策略数量的限制，请使用[delete-load-balancer-policy](https://docs.amazonaws.cn/cli/latest/reference/elb/delete-load-balancer-policy.html)命令删除所有未使用的策略。

1. （可选）使用以下[describe-load-balancer-policies](https://docs.amazonaws.cn/cli/latest/reference/elb/describe-load-balancer-policies.html)命令验证策略是否已创建：

   ```
   aws elb describe-load-balancer-policies --load-balancer-name my-loadbalancer --policy-name my-SSLNegotiation-policy
   ```

   响应包括策略的描述。

1. 使用以下 [set-load-balancer-policiesof-listener](https://docs.amazonaws.cn/cli/latest/reference/elb/set-load-balancer-policies-of-listener.html) 命令在负载均衡器端口 443 上启用该策略：

   ```
   aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-SSLNegotiation-policy
   ```
**注意**  
`set-load-balancer-policies-of-listener` 命令将指定负载均衡器端口的当前策略集替换为指定的策略集。`--policy-names` 列表必须包括要启用的所有策略。如果您省略当前已启用的策略，则禁用此策略。

1. （可选）使用以下[describe-load-balancers](https://docs.amazonaws.cn/cli/latest/reference/elb/describe-load-balancers.html)命令验证是否已为负载平衡器端口启用新策略：

   ```
   aws elb describe-load-balancers --load-balancer-name my-loadbalancer
   ```

   响应表明已在端口 443 上启用该策略。

   ```
   ...
     {
         "Listener": {
             "InstancePort": 443,
             "SSLCertificateId": "ARN",
             "LoadBalancerPort": 443,
             "Protocol": "HTTPS",
             "InstanceProtocol": "HTTPS"
         },
         "PolicyNames": [
             "my-SSLNegotiation-policy"
         ]
     }
   ...
   ```

当您创建自定义安全策略时，必须至少启用一项协议和一个密码。DSA 和 RSA 密码特定于签名算法，用于创建 SSL 证书。如果您已有一个 SSL 证书，请确保启用用于创建该证书的密码。您的自定义策略的名称不得以 `ELBSecurityPolicy-` 或 `ELBSample-` 开头，因为这些前缀是为预定义安全策略的名称保留的。

**使用自定义 SSL 安全策略**

1. 使用[create-load-balancer-policy](https://docs.amazonaws.cn/cli/latest/reference/elb/create-load-balancer-policy.html)命令使用自定义安全策略创建 SSL 协商策略。例如：

   ```
   aws elb create-load-balancer-policy --load-balancer-name my-loadbalancer 
    --policy-name my-SSLNegotiation-policy --policy-type-name SSLNegotiationPolicyType 
    --policy-attributes AttributeName=Protocol-TLSv1.2,AttributeValue=true 
    AttributeName=Protocol-TLSv1.1,AttributeValue=true 
    AttributeName=DHE-RSA-AES256-SHA256,AttributeValue=true 
    AttributeName=Server-Defined-Cipher-Order,AttributeValue=true
   ```

   如果您超出了负载均衡器策略数量的限制，请使用[delete-load-balancer-policy](https://docs.amazonaws.cn/cli/latest/reference/elb/delete-load-balancer-policy.html)命令删除所有未使用的策略。

1. （可选）使用以下[describe-load-balancer-policies](https://docs.amazonaws.cn/cli/latest/reference/elb/describe-load-balancer-policies.html)命令验证策略是否已创建：

   ```
   aws elb describe-load-balancer-policies --load-balancer-name my-loadbalancer --policy-name my-SSLNegotiation-policy
   ```

   响应包括策略的描述。

1. 使用以下 [set-load-balancer-policiesof-listener](https://docs.amazonaws.cn/cli/latest/reference/elb/set-load-balancer-policies-of-listener.html) 命令在负载均衡器端口 443 上启用该策略：

   ```
   aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-SSLNegotiation-policy
   ```
**注意**  
`set-load-balancer-policies-of-listener` 命令将指定负载均衡器端口的当前策略集替换为指定的策略集。`--policy-names` 列表必须包括要启用的所有策略。如果您省略当前已启用的策略，则禁用此策略。

1. （可选）使用以下[describe-load-balancers](https://docs.amazonaws.cn/cli/latest/reference/elb/describe-load-balancers.html)命令验证是否已为负载平衡器端口启用新策略：

   ```
   aws elb describe-load-balancers --load-balancer-name my-loadbalancer
   ```

   响应表明已在端口 443 上启用该策略。

   ```
   ...
     {
         "Listener": {
             "InstancePort": 443,
             "SSLCertificateId": "ARN",
             "LoadBalancerPort": 443,
             "Protocol": "HTTPS",
             "InstanceProtocol": "HTTPS"
         },
         "PolicyNames": [
             "my-SSLNegotiation-policy"
         ]
     }
   ...
   ```