双方在SSL/TLS协议握手过程中协商加密套件。SSL/TLS协议基本过程:
- 客户端向服务器端索要并验证公钥
- 双方协商生成对话密钥
- 双方采用对话密钥进行加密通信
简单说,SSL/TLS通过四次握手,主要交换三个信息:
- 数字证书:该证书包含了服务器公钥等信息,一般由服务器发给客户端,接收方通过验证这个证书是不是由可信赖的CA签发,或者与本地证书相对比,来判断证书是否可信。假如需要双向验证,则服务器和客户端都需要发送数字证书给对方验证;
- 三个随机数:这三个随机数构成了后续通信过程中用来对数据进行对称加密解密的对话密钥。客户端首先发送第一个随机数N1,然后服务器返回第二个随机数N2(这个过程同时把之前提到的证书发给客户端),这两个随机数都是明文的;第三个随机数,客户端用从数字证书中得到的服务器公钥进行加密,发送给服务器;服务器用自己的私钥解密获取第三个随机数N3。至此,双方都得到了N1+N2+N3,两端使用这三个随机数来生成对话密钥,后续的通信使用这个对话密钥进行加密;
- 加密通信协议:就是双方商量使用哪一种加密方式,加入两者支持的加密方式不匹配,则无法进行通信。
四次握手的步骤:
- 客户端发出请求(ClientHello)
这一步,客户端主要向服务器提供以下信息:
- 支持的协议版本,如TLS 1.0
- 一个客户端生成的随机数N1,稍后用于生成对话密钥
- 支持的加密算法,比如RSA公钥加密
- 支持的压缩算法
- 服务器回应(ServerHello)
这一步服务器主要回复的信息:
- 确认使用的协议版本,比如TLS 1.0。如果客户端与服务器支持的版本不一致,服务器关闭加密通信
- 确认使用的加密方法,比如RSA公钥加密,返回加密公钥
- 服务器的数字证书
- 第二个随机数N2
- 客户端回应
- 验证证书合法性(颁发证书的机构是否合法,证书中包含的网站地址与正在访问的地址是否一致等),如果证书受信任,则浏览器栏里会显示一个小锁,否则给出证书不受信提示
- 如果证书受信,客户端生成第三个随机数N3,并用证书中的服务器公钥进行加密
- 使用之前协商好的HASH计算握手信息,并用随机数N3进行加密,最后将之前生产的所有信息发送给服务器
- 服务器
- 用私钥解密获得随机数N3,使用N3解密握手消息,验证HASH是否与客户端发来的一致。
- 至此双方都得到了3个随机数,可以得到通用的会话密钥对后续的通信进行对称加密
ALPN(Application Layer Protocal Negotiation)应用层协议协商,是TLS的扩展,允许在安全连接的基础上进行应用层协议的协商。在TLS握手的ClientHello阶段,客户端发送支持的协议列表,ServerHello阶段,服务器会选择一种协议,如果客户端和服务器支持HTTP2,那么就可以使用HTTP2进行通信。
网友评论