
# SSL 单向认证和双向认证说明
HTTPS在HTTP的基础上加入了SSL协议（Secure Sockets Layer）即"安全套接层"协议，对信息、数据加密，用来保证数据传输的安全，SSL支持单向认证和双向认证两种认证方式。
- 单向认证：客户端与服务端连接时，客户端需要验证所连接的服务端是否正确。
- 双向认证：客户端与服务端连接时，除了客户端需要验证所连接的服务器是否正确之外，服务端也需要验证接入的客户端是否正确。
#### 应用场景
SLL单向认证适用于客户端只需验证服务端身份的场景，如网站访问这类无需在通讯层做用户身份验证，而应用逻辑层足以保障安全的情况。
SSL双向认证机制保证服务器端与客户端能互相验证对方的身份，主要目的是防止中间人攻击，确保通信的安全性和可靠性。这种机制一般使用在需要高安全性的场景中，例如银行、金融服务、物联网、企业内部服务或政府服务等涉及隐私信息，或只对特定客户端提供服务的场景中。
![](https://support.huaweicloud.com/ccm_faq/public_sys-resources/note_3.0-zh-cn.png)
弹性负载均衡 ELB 可在创建HTTPS监听器时，配置单向认证或双向认证，具体操作请参见[通过ELB部署HTTPS单向认证或双向认证](https://support.huaweicloud.com/bestpractice-elb/elb_bp_0800.html)。
#### 功能原理
- SSL单向认证
  图1单向认证   
  ![](https://support.huaweicloud.com/ccm_faq/zh-cn_image_0000002321747953.png)
  
  1. 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。
  
  2. 服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息，以及服务端的证书，即公钥证书。
  
  3. 客户端使用服务端返回的信息验证服务端SSL证书的合法性，包括：证书是否过期、发行服务器证书的CA是否可靠、返回的公钥是否能正确解开返回证书中的数字签名、服务器证书上的域名是否和服务器的实际域名相匹配，验证通过后，将继续进行通信，否则终止通信。
  
  4. 客户端随机产生对称加密密钥，并用服务端的公钥（服务端的公钥从步骤2中的服务端的证书中获得）对其加密，然后发送给服务端。
  
  5. 服务端收到客户端发送的加密信息后，使用私钥进行解密，获取对称加密密钥。
  
  6. 在接下来的会话中，客户端和服务端将会使用该对称加密密钥进行通信，保证通信过程中信息的安全。
   
- SSL双向认证
  图2双向认证   
  ![](https://support.huaweicloud.com/ccm_faq/zh-cn_image_0000002321755749.png)
  
  1. 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。
  
  2. 服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息，以及服务端的证书，即公钥证书。
  
  3. 客户端使用服务端返回的信息验证服务端SSL证书的合法性，包括：证书是否过期、发行服务器证书的CA是否可靠、返回的公钥是否能正确解开返回证书中的数字签名、服务器证书上的域名是否和服务器的实际域名相匹配，验证通过后，将继续进行通信，否则终止通信。
  
  4. 服务端要求客户端发送客户端的证书，客户端将自己的证书和公钥发送至服务端。
  
  5. 服务端验证客户端的证书，通过继续进行通信，否则断开连接。
  
  6. 客户端随机产生对称加密密钥，并用服务端的公钥（服务端的公钥从步骤2中的服务端的证书中获得）对其加密，然后发送给服务端。
  
  7. 服务端收到客户端发送的加密信息后，使用服务端的私钥进行解密，获取对称加密密钥。
  
  8. 在接下来的会话中，客户端和服务端将会使用该对称加密密钥进行通信，保证通信过程中信息的安全。
   
 
