
# 通过ELB部署HTTPS双向认证
#### 应用场景
一般的HTTPS业务场景只对服务器做认证，因此只需要配置服务器的证书即可。某些关键业务，需要对通信双方的身份都要做认证，以确保业务的安全性。
此时，除了配置服务器的证书之外，还需要配置客户端的证书，以实现通信双方的双向认证功能。
本章节以自签名证书为例，介绍如何配置HTTPS双向认证。但是自签名证书存在安全隐患，建议客户使用[云证书与管理](https://support.huaweicloud.com/productdesc-ccm/ccm_01_0001.html)服务购买证书、或购买其他权威机构颁发的证书。
#### 操作流程
图1配置HTTPS业务双向认证操作流程   
![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001887643234.png "点击放大")
 #### 步骤一：使用OpenSSL制作CA证书
1. 登录到任意一台安装有openssl工具的Linux机器。
2. 创建工作目录并进入该目录。 **mkdir ca**
   **cd ca**
   
3. 创建CA证书的openssl配置文件ca_cert.conf，内容如下：
   ```
   [ req ]
   distinguished_name     = req_distinguished_name
   prompt                 = no
    
   [ req_distinguished_name ]
    O                      = ELB
   ```
   
4. 创建CA证书私钥文件ca.key。 **openssl genrsa -out ca.key 2048**
   图2生成CA证书私钥文件   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001865923885.jpg "点击放大") 
5. 创建CA证书的csr请求文件ca.csr。 **openssl req -out ca.csr -key ca.key -new -config ./ca_cert.conf**
   
6. 创建自签名的CA证书ca.crt。 **openssl x509 -req -in ca.csr -out ca.crt -sha1 -days 5000 -signkey ca.key**
   图3创建自签名CA证书   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001866004053.jpg "点击放大") 
 
#### 步骤二：使用CA证书签发服务器证书
用户可以用权威CA签发的证书或者自签名的证书，这里以自签名证书为例说明如何创建服务器证书。
1. 登录到生成CA证书的服务器。
2. 创建与CA平级的目录，并进入该目录。 **mkdir server**
   **cd server**
   
3. 创建服务器证书的openssl配置文件server_cert.conf，内容如下：
   ```
   [ req ]
   distinguished_name     = req_distinguished_name
   prompt                 = no
    
   [ req_distinguished_name ]
    O                      = ELB
    CN                     = www.test.com
   ```
   ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/note_3.0-zh-cn.png)
   CN字段可以根据需求改为服务器对应的域名、IP地址。
   
4. 创建服务器证书私钥文件server.key。 **openssl genrsa -out server.key 2048**
   
5. 创建服务器证书的csr请求文件server.csr。 **openssl req -out server.csr -key server.key -new -config ./server_cert.conf**
   
6. 使用CA证书签发服务器证书server.crt。 **openssl x509 -req -in server.csr -out server.crt -sha1 -CAcreateserial -days 5000** **-CA ../ca/ca.crt -CAkey ../ca/ca.key**
   图4签发服务器证书   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001819164346.jpg "点击放大") 
 
#### 步骤三：使用CA证书签发客户端证书
1. 登录到生成CA证书的服务器。
2. 创建与CA平级的目录，并进入该目录。 **mkdir client**
   **cd client**
   
3. 创建客户端证书的openssl配置文件client_cert.conf，内容如下：
   ```
   [ req ]
   distinguished_name     = req_distinguished_name
   prompt                 = no
    
   [ req_distinguished_name ]
    O                      = ELB
    CN                     = www.test.com
   ```
   ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/note_3.0-zh-cn.png)
   CN字段可以根据需求改为对应的域名、IP地址。
   
4. 创建客户端证书私钥文件client.key。 **openssl genrsa -out client.key 2048**
   图5创建客户端证书私钥文件   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001865923893.jpg "点击放大") 
5. 创建客户端证书的csr请求文件client.csr。 **openssl req -out client.csr -key client.key -new -config ./client_cert.conf**
   图6创建客户端证书csr文件   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001819164334.jpg "点击放大") 
6. 使用CA证书签发客户端证书client.crt。 **openssl x509 -req -in client.csr -out client.crt -sha1 -CAcreateserial -days 5000** **-CA ../ca/ca.crt -CAkey ../ca/ca.key**
   图7签发客户端证书   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001819164338.jpg "点击放大") 
7. 把客户端证书格式转为浏览器可识别的p12格式。 **openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12**
   ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/note_3.0-zh-cn.png)
   该命令执行时需要输入导出密码，请输入并记住该密码，在证书导入浏览器时需要使用。
   
 
#### 步骤四：上传服务器证书到ELB控制台
1. 进入[弹性负载均衡列表页面](https://console.huaweicloud.com/vpc/?locale=zh-cn#/elb/list)。
2. 单击"证书管理 \> 创建证书"。
3. 在创建证书页面，证书类型选择"服务器证书"，同时把前面生成的服务器证书server.crt以及私钥server.key的内容复制到对应的区域，单击"确定"按钮。
   ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/note_3.0-zh-cn.png)
   复制内容时请将最后的换行符删除，避免保存时报错。
   ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/note_3.0-zh-cn.png)
   服务器证书和私钥内容只支持上传pem格式。
   
 
#### 步骤五：上传CA证书到ELB控制台
1. 进入[弹性负载均衡列表页面](https://console.huaweicloud.com/vpc/?locale=zh-cn#/elb/list)。
2. 单击"证书管理 \> 创建证书"。
3. 在创建证书页面，证书类型选择"CA证书"，同时把[步骤一：使用OpenSSL制作CA证书]创建的客户端CA证书ca.crt的内容复制到证书内容区域，单击"确定"按钮。
   
   ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/note_3.0-zh-cn.png)
   复制内容时请将最后的换行符删除，避免保存时报错。
   图8创建CA证书   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001819164342.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/note_3.0-zh-cn.png)
   CA证书内容只支持上传pem格式。
   
   
 
#### 步骤六：配置HTTPS双向认证监听器
1. 进入[弹性负载均衡列表页面](https://console.huaweicloud.com/vpc/?locale=zh-cn#/elb/list)。
2. 在添加监听器页面，协议类型选择"HTTPS"，"SSL解析方式"选择"双向认证"，并且在服务器证书和CA证书两个配置项中选择所添加的服务器证书和CA证书对应的名称。
   图9添加HTTPS监听器并配置双向认证   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001865923881.png "点击放大") 
3. 单击"下一步：配置后端分配策略"，后端服务器组参数选择"使用已有"。选择已经创建完成的服务器组，完成后单击"下一步：确认配置"。
4. 确认配置参数后，单击"提交"，完成HTTPS监听器的创建。
 
#### 步骤七：导入客户端证书并验证
**浏览器方式功能测试**
1. 浏览器导入客户端证书（以Internet Explorer 11为例说明）
   1. 把客户端证书从Linux机器导出来，即前面签发的client.p12证书文件。
   
   2. 单击"设置 \> Internet选项"，切换到"内容"页签。
   
   3. 单击"证书"，然后单击"导入"，导入client.p12证书文件。
      图10安装client.p12证书   
      ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001865923889.png "点击放大") 
    
2. 测试验证
   在浏览器中输入地址，浏览器会弹出证书选择窗口，如下，选择客户端证书，然后点确定按钮，可以正常访问网站，如[图12 正常访问网站]。
   图11正常访问网站   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001866004057.png "点击放大") 
**Curl工具方式功能测试验证**
1. 导入客户端证书 把客户端证书client.crt和客户端私钥文件client.key拷贝到新目录，如目录/home/client_cert。
   
2. 测试验证
   在shell界面，输入以下命令，请输入正确的证书地址和密钥文件地址，以及负载均衡器的IP地址和监听器端口(以下用https://XXX.XXX.XXX.XXX:XXX表示，以实际IP地址和端口为准)。
   ```
   curl -k --cert /home/client_cert/client.crt --key /home/client_cert/client.key https://XXX.XXX.XXX.XXX:XXX/ -I
   ```
   如果可以正确获得响应码，如[图12]说明验证成功。
   图12正确响应码示例   
   ![](https://support.huaweicloud.com/bestpractice-elb/zh-cn_image_0000001866004061.png "点击放大") 
 
