8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)

8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)

  • 1. 客户端发送Client Hello给服务器
    • 1.1 Client Hello
  • 2. 服务器发送Server Hello给客户端
    • 2.1 Server Hello
    • 2.2 Server Certificate
    • 2.3 Server Key Exchange
    • 2.4 Certificate Request
    • 2.5 Server Hello Done
  • 3. 客户端响应Server Hello
    • 3.1 Client Certificate
    • 3.2 Client Key Exchange
    • 3.3 Certificate Verify
    • 3.4 Change Cipher Spec
    • 3.5 Client Finished Message(Encrypted Handshake Message)
  • 4. 服务器的最后响应
    • 4.1 Change Cipher Spec
    • 4.2 Server Finished Hello
  • 参考
  • 附录
    • 1. TLS Handshake Protocol steps
    • 2. Handshake Protocol

安全SSL/TLS连接的建立是SSH握手的过程。在所有以https://开头的网站中都会执行这个过程。

1. 客户端发送Client Hello给服务器

1.1 Client Hello

首先,客户端(通常是服务器)先向服务器发出加密通信的请求,这个过程叫做Client Hello请求。

在这一步客户端主要提供了一下信息。

(1) 支持的协议版本,比如TLS 1.2版。
(2) 一个客户端生成的随机数,稍后用于生成"会话密钥"。
(3) 支持的加密方法,这里通常是一组加密套件(Cipher Suites)。
(4) 支持的压缩方法。

加密套件通常包含以下信息:

  • 密钥交换算法
  • 对称加密算法
  • 摘要算法
Cipher Suite Key Exchange Cipher Mac
TLS_RSA_WITH_3DES_EDE_CBC_SHA RSA 3DES_EDE_CBC SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 DHE_RSA AES_128_CBC SHA256

8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)_第1张图片
这里需要注意的是,客户端发送的信息之中不包括服务器的域名。也就是说,理论上服务器只能包含一个网站,否则会分不清应该向客户端提供哪一个网站的数字证书。这就是为什么通常一台服务器只能有一张数字证书的原因。

对于虚拟主机的用户来说,这当然很不方便。2006年,TLS协议加入了一个Server Name Indication扩展,允许客户端向服务器提供它所请求的域名。

2. 服务器发送Server Hello给客户端

2.1 Server Hello

服务器收到客户端请求后,向客户端发出响应,这个过程叫做Server Hello。服务器响应包含以下内容。

(1) 确认使用的加密通信协议版本,比如TLS 1.2版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 一个服务器生成的随机数,稍后用于生成"会话密钥"。
(3) 确认使用的加密方法,示例中返回的加密套件是 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,这个密码套件的意思是使用ECDHE_RSA算法进行密钥交换、使用AES_128算法进行对称加密、使用SHA256算法计算摘要。

8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)_第2张图片

2.2 Server Certificate

Server Certificate: 服务器发送自己的证书给客户端。

2.3 Server Key Exchange

Server Key Exchange: 该消息是否发送取决于服务器选定的密钥交换算法,如果密钥交换算法是DHE_DSS、DHE_RSA或DH_anon时需要发送该消息。

The ServerKeyExchange message is sent by the server only when the server Certificate message (if sent) does not contain enough data to allow the client to exchange a premaster secret. This is true for the following key exchange methods:

  • DHE_DSS
  • DHE_RSA
  • DH_anon

2.4 Certificate Request

除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。

2.5 Server Hello Done

Server Hello Done: Server Hello消息发送结束。
8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)_第3张图片

3. 客户端响应Server Hello

3.1 Client Certificate

客户端收到服务器响应后,如果服务器要求客户端上传证书,客户端发送自己的证书给服务器。

3.2 Client Key Exchange

如果密钥交换算法是DHE_DSS、DHE_RSA或DH_anon,客户端发送自己的公钥给服务器。客户端和服务器各自依据DH参数生成premaster secret 和 master secret。
8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)_第4张图片

3.3 Certificate Verify

客户端验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

3.4 Change Cipher Spec

发送编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

3.5 Client Finished Message(Encrypted Handshake Message)

客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)_第5张图片

4. 服务器的最后响应

4.1 Change Cipher Spec

编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)_第6张图片

4.2 Server Finished Hello

服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。
8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)_第7张图片

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

参考

The Transport Layer Security (TLS) Protocol Version 1.2
Https传输中加密和密钥交换涉及到的算法总结与介绍
SSL/TLS协议运行机制的概述
图解SSL/TLS协议
SSL Handshake Explained
SSL协议详解(可参考会话恢复部分)

附录

1. TLS Handshake Protocol steps

The TLS Handshake Protocol involves the following steps:

  • Exchange hello messages to agree on algorithms, exchange random
    values, and check for session resumption.

  • Exchange the necessary cryptographic parameters to allow the
    client and server to agree on a premaster secret.

  • Exchange certificates and cryptographic information to allow the
    client and server to authenticate themselves.

  • Generate a master secret from the premaster secret and exchanged
    random values.

  • Provide security parameters to the record layer.

  • Allow the client and server to verify that their peer has
    calculated the same security parameters and that the handshake
    occurred without tampering by an attacker.

2. Handshake Protocol

8. PKI - SSL/TLS Handshake Protocol(TLS握手详解)_第8张图片

你可能感兴趣的:(PKI)