一文讲清SSL协议

OSI七层模型

计算机网络的OSI七层模型和TCP/IP四层模型想必大家都知道。其中SSL/TLS是一种介与于传输层(比如TCP/IP)和应用层(比如HTTP)的协议。它通过”握手协议(Handshake Protocol)”和”传输协议(Record Protocol)”来解决传输安全的问题。SSL/TLS是一个可选层,没有它,使用HTTP也可以通信,它存在的目的就是为了解决安全问题,这也就是HTTPS相对于HTTP的精髓所在

SSL协议

SSL(Secure Sockets Layer)最初由Netscape定义, 分别有SSLv2和SSLv3两个版本(SSLv1未曾对外发布); 在SSLv3之后SSL重命名为TLS。

协议时间建议说明
SSLv1//实际从未公开发布
SSLv21995弃用IETF已于2011年弃用
SSLv31996弃用IETF已于2015年弃用
TLSv1.01999兼容
TLSv1.12006兼容
TLSv1.22008主推目前最新可用版本
TLSv1.3//2016开始草案制定

——————

图解如下

《一文讲清SSL协议》

图解说明
  1. 客户端发出请求(Client Hello), 提供给服务端以下信息

    支持的SSL/TLS协议版本
    客户端支持的加密算法列表(非对称和对称算法)
    支持的压缩算法列表
    产生随机数number, 用以生成session key(对话秘钥)

  2. 服务端回应(Server Hello), 提供给客户端以下信息

    根据客户端支持的SSL/TLS协议版本,和自己的比较确定使用的SSL/TLS协议版本,如果没有合适的,对话关闭
    回应加密套件,压缩算法
    产生的一个随机数number,稍后用于生成”对话密钥(session key)”
    服务端数字证书(证明自己的身份,传递公钥)
    如果需要验证客户端,发出请求,要求客户端提供证书(SSL分为单项认证和双向认证,一般浏览器客户端只需要验证服务器的身份就行了)

  3. 客户端回应

客户端收到服务端的回应后,首先验证服务端的数字证书,如果证书没有问题继续下去,如果证书有问题,则会有相应提示,或者对话直接关闭。然后客户端在向服务端发送以下信息:

  • 如果服务端有请求证书,发送自己的数字证书
  • 产生一个随机数pre-master key(random number),并且用服务端数字证书中的公钥加密 这里我用公钥加密,服务端有私钥,所以可以获得这个随机数(先要确认服务端身份,我使用服务端的公钥机密自己的随机数,那么只有服务端可以解密这个随机数)
  • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
  1. 服务端最后的回应

如果有客户端的证书,就先验证客户端的证书

  • 使用自己的私钥,对随机数pre-master key解密,这时客户端和服务端各自有了三个随机数,然后用原来协商的加密方式生成本次通话使用的会话密钥(session key)
  • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送

服务器会为每个浏览器(或客户端软件)维护一个session ID,在TLS握手阶段传给浏览器,浏览器生成好密钥传给服务器后,服务器会把该密钥存到相应的session ID下,之后浏览器每次请求都会携带session ID,服务器会根据session ID找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了!

1. 数字证书的作用

由权威的CA机构发布的,可以证明服务器的身份,防止李鬼

2. 如何防止中间人攻击?
3. 为什么要协商对称算法呢?

由于是公私钥对加密太消耗资源了,所以最后改为对称加密的方式进行数据的传输

4. 三个随机数的作用
实战
  1. 客户端发出请求(Client Hello), 提供给服务端以下信息
    《一文讲清SSL协议》
    《一文讲清SSL协议》> 可以看到支持的最低版本TSL 1.2、以及16种密码套件、随机数、Session ID

  2. 服务端回应(Server Hello), 提供给客户端以下信息
    《一文讲清SSL协议》
    《一文讲清SSL协议》
    可以看到服务端提供了类似信息, 只支持TLS_CHACHA20_POLY1305_SHA256

  3. 待续…

    原文作者:youaresherlock
    原文地址: https://blog.csdn.net/qq_32252957/article/details/120787443
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞