HTTPS协议总论

前言

HTTPS协议是用来解决HTTP协议的不安全性的,HTTP协议是明文传输的.HTTPS在此基础上添加了加解密.

HTTPS在HTTP和TCP之间加了一层SSL,不直接和TCP进行交互而是通过SSL来交互

SSL/TSL

SSL(Secure Socket Layer)安全套接字,由网景公司发明,从 3.1 开始被 IETF 标准化并改名为TSL(Transport Layer Security)传输层安全,是信息安全领域的权威标准,现行标准为1.3 (2021/03/07)

HTTPS优点

HTTPS主要解决数据传输的安全性,通讯双方身份的可靠性,数据的安全性

数字证书,数字签名,对称加密,非对称加密,CA

CA机构,互联网公认的具有权威可靠性的证书颁发机构.

数字签名,也就是数字摘要,将一些信息通过摘要算法生成摘要,保证数据不被篡改.

对称加密,加密和解密都是用同样的秘钥.

非对称加密,加解密不能使用同样的秘钥,公钥加密只能私钥解,私钥加密也只能公钥解.

数字证书,这里指的是公钥数字证书,由CA机构颁发给网站.公钥数字证书中包含公钥,签名算法,签名哈希算法,有效期,颁发机构,使用者,数字签名等等信息.

在这里插入图片描述

图中的指纹就是数字签名

公钥数字证书的生成过程大致如下:首先服务器会自己生成一对公私钥,把公钥和自己的网站信息公司信息发给CA机构,CA机构认证为正规会通过自己的签名摘要算法把服务器的公钥和一些服务器信息作为原文生成摘要,然后使用秘钥对摘要进行非对称加密生成指纹也就是数字签名.再将自己的证书链和这些信息放到一起打包成证书.

秘钥交换算法

在https中实际在传输应用数据时使用的还是对称加密,因为对称加密算法的性能损耗还是要优于非对称.而这个秘钥不能在网络上传输.所以需要有一套机制可以交换秘钥.常见的秘钥交换算法有DH

HTTPS中的TSL流程

https可以理解为使用非对称加密来交换对称加密的秘钥,再使用对称加密来传输数据.用证书来验证通讯双方的身份.

大致流程图如下:
在这里插入图片描述

client hello

客户端向服务端发出加密通讯的请求
主要包括:

  • 支持的协议版本,比如TLS 1.0版。
  • 一个客户端生成的随机数random1,稍后用于生成"对话密钥"。
  • 支持的加密方法列表。
  • 支持的压缩方法。
server hello

服务端确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

服务器将随机生成一个数random2,稍后用于生成"对话密钥"。

从客户端支持的加密算法中取出一个作为交换秘钥的非对称加密方法,比如RSA公钥加密。

将以上信息和服务器公钥数字证书一起返回给客户端

此外,对于非常重要的保密数据,服务端还需要对客户端进行验证,以保证数据传送给了安全的合法的客户端。服务端可以向客户端发出 Cerficate Request 消息,要求客户端发送证书对客户端的合法性进行验证。比如,网银就只允许认证的客户连入自己的网络,银行会向正式客户提供USB密钥,里面就包含了一张客户端证书。

客户端验证证书

Client Key Exchange

如果服务端需要对客户端进行验证,在客户端收到服务端的 Server Hello 消息之后,首先需要向服务端发送客户端的证书,让服务端来验证客户端的合法性。

Certificate Verify
客户端需要对服务端的证书进行检查
如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告
再根据证书中的签名摘要算法,通过对签名中的一些信息进行签名摘要计算得到服务端证书的数字摘要,而后取出对应证书颁发机构的公钥(在计算机系统中或者浏览器中)使用证书中的签名算法对指纹进行解密得到原文也就是CA的数字摘要,比较这两个摘要判断证书是否有效.
如果证书没有问题,客户端就会从服务器证书中取出服务器的公钥。然后,向服务器发送下面三项信息:

  • 一个随机数random3。该随机数用服务器公钥加密得到PreMaster key,防止被窃听
  • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
  • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验

上面第一项的随机数,是整个握手阶段出现的第三个随机数,它是客户端使用一些加密算法(例如:RSA, Diffie-Hellman)产生一个48个字节的Key,这个Key叫 PreMaster Secret。客户端还会根据radom1、radom2、pre-master secret通过一定的算法得出session Key和MAC算法秘钥作为最终对称加密传输的秘钥

ChangeCipherSpec
ChangeCipherSpec是一个独立的协议,体现在数据包中就是一个字节的数据,用于告知服务端,客户端已经切换到之前协商好的加密套件(加密算法)的状态,准备使用之前协商好的加密套件加密数据并传输了。

在ChangecipherSpec传输完毕之后,客户端会使用之前协商好的加密套件和Session Secret加密一段 Finish的数据传送给服务端,此数据是为了在正式传输应用数据之前对刚刚握手建立起来的加解密通道进行验证。

服务器最后回应

服务端在接收到客户端传过来的 PreMaster 加密数据之后,使用私钥对这段加密数据进行解密,并对数据进行验证,也会使用跟客户端同样的方式生成 Session Secret,一切准备好之后,会给客户端发送一个 ChangeCipherSpec,告知客户端已经切换到协商过的加密套件状态,准备使用加密套件和 Session Secret加密数据了。之后,服务端也会使用 Session Secret 加密一段 Finish 消息发送给客户端,以验证之前通过握手建立起来的加解密通道是否成功。

根据之前的握手信息,如果客户端和服务端都能对Finish信息进行正常加解密且消息正确的被验证,则说明握手通道已经建立成功,接下来,双方可以使用上面产生的Session Secret对数据进行加密传输了

注意

HTTPS和HTTP在传输层的协议都是TCP,所以都会有TCP三次握手和TCP确认机制,上面的流程只是HTTPS中的TSL握手

HTTPS完整流程:TCP三次握手建立连接,TLS三次握手建立加密通讯,TLS加密通讯,TCP四次挥手断开连接.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值