当前位置:   article > 正文

【网络面试高频】- SSL/TLS四次握手过程是怎么样的?_ssl握手协议 面试

ssl握手协议 面试

【网络面试高频】- SSL/TLS四次握手过程是怎么样的?

SSL/TLS四次握手过程

SSL(Secure Socket Layer 安全套接层)是基于 HTTPS 下的一个协议加密层,最初是由网景公司(Netscape)研发,后被 IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入(RFC:Request For Comments 请求注释),RFC 里包含了很多互联网技术的规范。

起初是因为 HTTP 在传输数据时使用的是明文(虽然说 POST 提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患,网景公司推出了 SSL 安全套接字协议层,SSL 是基于 HTTP 之下,TCP 之上的一个协议层,是基于 HTTP 标准并对 TCP 传输数据时进行加密,所以 HTTPS 可以想成是 HTTP+SSL 的简称。

由于 HTTPS 的推出受到了很多人的欢迎,在 SSL 更新到 3.0 时,IETF 对 SSL3.0 进行了标准化,并添加了少数机制(但是几乎和 SSL3.0 无差异),标准化后的 SSL 更名为 TLS1.0(Transport Layer Security 安全传输层协议),可以说 TLS 就是 SSL 的新版本3.1,并同时发布 “RFC2246-TLS 加密协议详解”。

应该注意到,HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。

通过使用 SSL,HTTPS 具有了加密、认证和完整性保护的特点。

SSL/TLS四次握手过程

(1)客户端发出请求Client Hello

首先,客户端先向服务器发出加密通信的请求,这被叫做clienthello请求。

在这一步,客户端主要向服务器提供以下信息:

  • 支持的协议版本,比如TLS1.0版本;
  • 支持的加密方法,比如RSA公钥加密;
  • 一个客户端生成的随机数(client random), 稍后用于生成对话密钥(session key)

由于客户端(如浏览器)对一些加解密算法的支持程度不一样,但是在TLS协议传输过程中必须使用同一套加解密算法才能保证数据能够正常的加解密。在TLS握手阶段,客户端首先要告知服务端,自己支持哪些加密算法,所以客户端需要将本地支持的加密套件(Cipher Suite)的列表传送给服务端。除此之外,客户端还要产生一个随机数,这个随机数一方面需要在客户端保存,另一方面需要传送给服务端,客户端的随机数需要跟服务端产生的随机数结合起来产生后面要讲到的Master Secret。

(2)服务器回应Server Hello

服务器收到客户端请求后,向客户端发出回应,这叫做serverhello。

这一步服务器主要干三件事:

  • 确认使用的加密通信协议版本,比如TLS1.00版本。如果游览器与服务器支持的版本不一致,服务器关闭加密通信;
  • 确认使用的加密方法(客户端所支持),比如RSA公钥加密;
  • 服务器证书非对称加密的公钥,以及**一个随机数(Server random)**发送给客户端游览器

服务端在接收到客户端的Client Hello之后,服务端需要将自己的证书发送给客户端。这个证书是对于服务端的一种认证。例如,客户端收到了一个来自于称自己是http://www.alipay.com的数据,但是如何证明对方是合法的alipay支付宝呢?这就是证书的作用,支付宝的证书可以证明它是alipay,而不是财付通。证书是需要申请,并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书。颁发证书的同时会产生一个私钥和公钥。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被串改。另外,证书还有个有效期。

(3)客户端回应

客户端收到服务器回应以后,首先验证服务器证书,验证手段就是执行如下三种检查:

  • 检查证书是否已过期
  • 检查证书中的域名与实际域名是否一致
  • 检查证书是否是可信机构颁布的;

如果,上述过程中有任何一个环节发现问题,那么浏览器就会向访问者显示一个警告,由其选择是否还要继续通信。如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串新的随机数(Premaster secret ),并用证书中提供的公钥加密,发送给服务器

此时,浏览器会根据前三次握手中的三个随机数:

  • Client random
  • Server random
  • Premaster secret

通过一定的算法来生成 “会话密钥” (Session Key),这个会话密钥就是接下来双方进行对称加密解密使用的密钥!

(4)服务端回应

服务端收到客户端的回复,利用已知的加密解密方式进行解密,服务器收到客户端的第三个随机数( Premaster secret) 之后,使用同样的算法计算出 “会话密钥” (Session Key)。

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用 “会话密钥” 加密内容。(非对称加密解密将不再使用,接下来完全由对称加密接手了,因为密钥已经安全的传送给了通信的双方)

总结:

在这里插入图片描述

1.客户端请求建立SSL链接,并向服务端发送一个随机数–Client random和客户端支持的加密方法,比如RSA公钥加密,此时是明文传输。

2.服务端回复一种客户端支持的加密方法、一个随机数–Server random、授信的服务器证书非对称加密的公钥

3.客户端收到服务端的回复后利用服务端的公钥,加上新的随机数–Premaster secret 通过服务端下发的公钥及加密方法进行加密,发送给服务器。

4.服务端收到客户端的回复,利用已知的加解密方式进行解密,同时利用Client random、Server random和Premaster secret通过一定的算法生成HTTP链接数据传输的对称加密key – session key

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/599711
推荐阅读
相关标签
  

闽ICP备14008679号