前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTPS 握手你知道吗?

HTTPS 握手你知道吗?

作者头像
前端老王
发布2020-11-26 14:37:09
5850
发布2020-11-26 14:37:09
举报
文章被收录于专栏:前端时空前端时空

charles 抓包时安装的证书是什么?除了三次握手和四次挥手,还有 HTTPS 的握手你知道吗?

为什么需要HTTPS

HTTP是明文传输的。在一个广播域内(连在同一个交换机的所有设备),所有的设备都是可以收到传输的数据(只是链路层协议会检查mac地址是否为自己,不是就丢弃)。

其数据的安全可能受到 窃听篡改发送者身份不可靠 的三个问题。 所以TLS( 传输安全协议)提供了 加密数字签名、 和 数字证书 来解决这三个问题。

加密-防窃听

加密算法分为对称加密和非对称加密,TLS使用的是非对称加密与对称加密结合。

对称加密

对称加密即加密和解密用同一个密钥,其优点是效率高,但没有办法直接在网络上传播(直接传播对称密钥会使密钥也被窃听)。

非对称加密

非对称加密是指用一对密钥之一加密,另一个解密(一个叫公钥,一个叫私钥)。可以用公钥加密,也可以用私钥加密。

其优点是可以在网络通信的场景中使用——所有网络的用户都公开自己的公钥。发送者用接收者的公钥对数据加密,这样只有接收者可以解开这份加密过的数据。但缺点是加解密的效率低。

  • 非对称加密实现的原理——密钥协商算法

用一个简单的数学问题来模拟非对称加密的核心RSA

有两个规定好的公式来计算公钥和密钥:每个人的私钥都只有自己知道,公钥则是公开的

3^私钥 % 17 = 公钥可以看出从公钥是无法逆推私钥的公钥^密钥 %17 = 密钥可以看出密钥的得出需要一对完整的密钥对

代码语言:javascript
复制
现在规定:

A:(私钥)13
B:(私钥)15

可以计算出:

A:(私钥)13 (公钥)6
B:(私钥)15 (公钥)12

最后的密钥:

A:(私钥)13 (公钥)6  (密钥)10 B:(私钥)15 (公钥)12 (密钥)10

这样实现了在开放的网络中A和B公开的协商后了一对只要它们俩才知道的密钥(密钥的得出必须要协商双方其中一方的公钥+私钥

A现在要告诉B一个数字k(原文),于是把他放在一个信封里,信封上面标注着12(12是B的公钥),并且传输k+10(10是协商的密钥)(加密)。B收到之后,看到信封上的12,知道是发给自己的消息,会减去10(解密)。

而其他窃听者只能得到k+10(密文),由于没有B的私钥,没有办法算出密钥,就无法知道真实的数据。

通过这样的方式,发送方用接收方的公钥加密,保证只有接收方能读懂发送方发的数据。

数字签名-防篡改

加密使得发送方不用担心数据被别人看到,但接收方并不能保证自己受到的数据是可信的。这份数据可能被篡改过(即信封中k+10可能会被人改成k+9)。

所以引入了数字签名来保证B收到数据时可以判断数据有没有被别人修改过。

数字签名类似于校验码,会附加在要传输的原文件的尾部,原文件+数字签名任何一者的修改过都会导致无法通过校验。

  • 数字签名的实现-私钥加密摘要数字签名是用发送方的私钥加密原文件的摘要得到的。摘要即原文件的一个哈希映射,因为体积小,加密会更快。

接收方接收到原文件和数字签名时,会做两件事。

  1. 将原文件计算,得到摘要m
  2. 用A的公钥解密数字签名,得到摘要n 如果m、n两份摘要相同,说明原文件没有被篡改过。

注意:数字签名并没有防止窃听,只能保证发送的数据和收到的数据是一样的

数字证书-身份认证

上面的流程中,使用到了A的公钥去解密。所以还存在一个问题,即这个公钥可靠吗?即A这个用户真的存在吗,或者它真的是A本人吗?

所以有了数字证书颁发机构和数字证书,用来做发送方的身份确认。

数字证书颁发机构(CA)是通信中的权威机构,所有用户都信任它。

发送方A将会将自己的公钥交给CA,CA会用自己私钥对发送方A的公钥加密,生成A的证书,给A。

之后的通信过程中,A会首先把自己的公钥证书(用CA私钥加密的A的公钥)发送给B,B用CA的公钥解密收到的证书。解密成功,才认为这个公钥的可信的。

TLS的握手过程

TLS的握手过程可以简单分为两个过程

  • 客户端拿到服务端的CA证书,验证其有效性得到了服务端的公钥(保证了收到的数据没有被篡改)
  • 客户端和服务端分别生成同样的密钥,之后用生成的密钥加密通信
  1. ->客户端向服务器发出加密通信的请求,并携带随机数i
  2. <-服务端回应,3.发送服务端CA证书给客户端,并携带随机数j
  3. 客户端校验CA证书,得到服务端的公钥
  4. ->客户端用服务端的公钥加密一个随机数k,发送
  5. 客户端和服务端分别用ijk三个随机数生成相同的密钥(对称密钥)
  6. <-服务端发送握手完毕的消息,之后使用对称密钥加密通信

安装代理证书

在使用charles抓包时,作为客户端和服务器的中间,可以截获所有数据。

但在抓取HTTPS数据包时,由于数据解密需要用到的密钥需要用到服务端的公钥和私钥,公钥即服务端的证书,而私钥不可能获取,所有会看到所有的数据都是乱码。

所以需要

  1. 让代理充当客户端的服务器——在客户端安装charles的证书,即客户端的加密都是使用charles的公钥,对于charles,客户端的数据就是可以读懂的了。
  2. 让代理充当服务器的客户端——Charles本身用服务器真正的证书(公钥)和服务端通信。

即安装的代理软件的证书就是 由代理软件自己签发的+用代理软件的公钥生成的 凭证。客户端必须安装这个证书,并且信任Charles这个签发机构。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端时空 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • charles 抓包时安装的证书是什么?除了三次握手和四次挥手,还有 HTTPS 的握手你知道吗?
    • 为什么需要HTTPS
      • 加密-防窃听
        • 对称加密
        • 非对称加密
      • 数字签名-防篡改
        • 数字证书-身份认证
          • TLS的握手过程
            • 安装代理证书
            相关产品与服务
            SSL 证书
            腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档