HTTP和HTTPS的通信流程

一、HTTP

  • 发送请求
  • TCP三次握手建立连接
  • 客户端发送HTTP请求,服务器返回响应的HTTP数据包,客户端解析数据包内容呈现在浏览器上

HTTP 由于是明文传输,所以在安全性上存在以下三个风险:

  • 窃听风险,因为明文传输,可以直接抓包获取传输的数据,就会导致信息的泄漏。
  • 篡改风险,比如强制入垃圾广告。
  • 冒充风险,如搭建一个某平台的仿真网站,通过DNS欺骗诱导用户访问。

HTTPS 是如何解决上面的三个风险的呢?

  • 混合加密的方式实现信息的机密性,解决了窃听的风险。
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 将服务器公钥放入到数字证书中,解决了冒充的风险。

二、HTTPS

在HTTP基础上添加新的协议SSL(安全套接字协议层),通过对传输过程数据进行加密进来保证数据的安全性。

  • Https默认使用端口443
  • https是在http和tcp层中间加了ssl安全层
  • ssl的四次握手是在tcp三次握手完成之后进行密钥协商的

SSL四次握手

第一次握手

1. ClienHello

  • 支持的SSL最高版本
  • 会话ID
  • 生成随机数randomClient
  • 加密算法列表
  • 压缩算法列表

第二次握手

2.1 ServerHello

  • 确定SLL协议版本
  • 会话ID
  • 生成随机数randomServer
  • 确定加密算法
  • 确定压缩算法

2.2 Server Certificate

  • 第一次建立必须要有CA证书,证书中包含公钥(PUBLIC_KEY)
  • 在证书生成的时候,除了有基本信息外,还有颁发机构的私钥签名,这个签名是通过对整个证书的内容(包括服务器公钥)摘要加密生成的。PRIVATE_KEY(SHA256(CA))

2.3 ServerHello Done

  • 表示服务器发送结束

第三次握手

3.1 Client Key Exchange

  • 查看证书的颁发机构、期限以及域名等,保证了证书本身信息合法
  • 验证签名:PUBLIC_KEY(私钥签名) = SHA256(CA)
  • 客户端产生一个新的随机数 (pre-master),并使用服务端的RSA公钥加密该随机数传给服务端。

3.2 Change Cipher Spec

  • 告诉服务端开始使用加密方式发送消息。

3.3 Finished

  • 客户端再发一个「Encrypted Handshake Message(Finished)」消息,把之前所有发送的数据做个摘要,再用会话密钥(master secret)加密一下,让服务器做个验证,验证加密通信是否可用,以及验证之前握手信息是否有被中途篡改过。
  • 会话密钥(master secret)为randomClient+randomServer+ pre-master

第四次握手

4.1 Change Cipher Spec

  • 通知客户端已知后续内容要加密

4.2 Finished

  • 并且将之前发送内容生成hash值一并返回给客户端,以供客户端校验;

最后,就用「会话密钥」加解密 HTTP 请求和响应了。

问题

为什么是3个随机数?

使用三个随机数,是因为 SSL 的协议默认不信任每个主机都能产生完全随机的数,如果只使用一个伪随机的数来生成秘钥,就很容易被破解。

通过使用三个随机数的方式,增加了自由度,一个伪随机可能被破解,但是三个伪随机就很接近于随机了,因此可以使用这种方法来保持生成秘钥的随机性和安全性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值