https

HTTPS是什么

  • HTTPS也是⼀个应⽤层协议.是在HTTP协议的基础上引⼊了⼀个加密层.
  • HTTP协议内容都是按照⽂本的⽅式明⽂传输的.这就导致在传输过程中出现⼀些被篡改的情况.

概念

1. 什么是"加密"

  • 加密就是把明文(要传输的信息)进行一系列变换, 生成密文.
  • 解密就是把密文再进行一系列变换,还原成明文.
  • 在这个加密和解密的过程中,往往需要一个或者 多个中间的数据,辅助进行这个过程,这样的数据称为密钥(正确发音yue四声,不过大家平时都读作yao四声) .

2. 为什么要加密

臭名昭著的"运营商劫持"
比如: 下载⼀个天天动听, 点击下载按钮, 就会弹出QQ浏览器的下载链接

  • 由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改.
  • 点击"下载按钮",其实就是在给服务器发送了一个HTTP请求,获取到的HTTP响应其实就包含了该APP的下载链接.运营商劫持之后,就发现这个请求是要下载天天动听,那么就自动的把交给用户的响应给篡改成"QQ浏览器"的下载地址了.
  • 所以:因为http的内容是明文传输的,明文数据会经过路由器、wifi热点、 通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击,所以我们才需要对信息进行加密。
  • 不⽌运营商可以劫持,其他的⿊客也可以⽤类似的⼿段进⾏劫持,来窃取⽤⼾隐私信息,或者篡改内容. 在互联⽹上,明⽂传输是⽐较危险的事情!!!, HTTPS就是在HTTP的基础上进⾏了加密,进⼀步的来保证⽤⼾的信息安全~.

3. 常的加密方式

对称加密

  • 采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的
  • 常⻅对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等
  • 特点:算法公开、计算量⼩、加密速度快、加密效率⾼

对称加密其实就是通过同⼀个"密钥",把明⽂加密成密⽂,并且也能把密⽂解密成明⽂.

举一个简单的例子来理解(按位异或):
假设明文a= 1234,密钥key= 88888,则加密a^key得到的密文b为9834.,然后针对密文9834再次进行运算b ^ key,得到的就是原来的明文1234。(对于字符串的对称加密也是同理,每一个字符都可以表示成一-个数字)、当然,按位异或只是最简单的对称加密. HTTPS中并不是使用按位异或。

非对称加密

  • 需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)
  • 两个密钥,无论哪一个都能做公钥 或 私钥, 但是需要公开一个,公开的那一个就较公钥,没有公开的另一个较私钥
  • 常见非对称加密算法(了解): RSA,DSA, ECDSA
  • 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

非对称加密要用到两个密钥,一个叫做"公钥", -个叫做"私钥";公钥和私钥是配对的.最大的缺点就是运算速度非常慢,比对称加密要慢很多.

  • 通过公钥对明文加密,变成密文
  • 通过私钥对密文解密,变成明文

也可以反着用

  • 通过私钥对明文加密,变成密文
  • 通过公钥对密文解密,变成明文

公钥给谁都⾏(不怕泄露),但是私钥只有⾃⼰持有,持有私钥的⼈才能解密。

4. 数据摘要&&数据指纹

在这里插入图片描述

  • 数字指纹(数据摘要),其基 本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一-种加密机制,但可以用来判断数据有没有被窜改。
  • 摘要常见算法:有MD5、SHA1、SHA256、SHA512等, 算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
  • 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比

5. 数字签名

  • 摘要经过加密,就得到数字签名

HTTPS的⼯作过程探究

  • 既然要保证数据安全,就需要进行"加密".
  • 网络传输中不再直接传输明文了,而是加密之后的"密文".
  • 加密的方式有很多,但是整体可以分成两大类:对称加密和非对称加密

方案1: 只使用对称加密(NO)

  • 如果通信双⽅都各⾃持有同⼀个密钥X,且没有别⼈知道,这两⽅的通信安全当然是可以被保证的(除⾮密钥被破解)

  • 引入对称加密之后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容是啥了.

  • 但是: 如何保证客户端和服务器使用的是同一密钥呢,那只能让客户端告诉服务端我使用的是什么密钥,又有问题了
    如何告诉呢?, 只能传过去, 但是如果直接把密钥明⽂传输,那么⿊客也就能获得密钥了~~此时后续的加密操作就形同虚设了, 因此密钥的传输也必须加密传输!

  • 但是要想对密钥进⾏对称加密,就仍然需要先协商确定⼀个"密钥的密钥".这就成了"先有鸡还是先有蛋"的问题了.此时密钥的传输再⽤对称加密就⾏不通了.

方案2:只使用非对称加密(NO)

  • 鉴于⾮对称加密的机制,如果服务器先把公钥以明⽂⽅式传输给浏览器,之后浏览器向服务器传数据前都先⽤这个公钥加密好再传,从客⼾端到服务器信道似乎是安全的(有安全问题),因为只有服务器有相应的私钥能解开公钥加密的数据。
  • 但是服务器到浏览器的这条路怎么保障安全?
  • 如果服务器⽤它的私钥加密数据传给浏览器,那么浏览器⽤公钥可以解密它,⽽这个公钥是⼀开始通过明⽂传输给浏览器的,若这个公钥被中间⼈劫持到了,那他也能⽤该公钥解密服务器传来的信息了。

方案3:只使用非对称加密(NO)

  • 客户端拥有公钥C与对应的私钥C’,服务端拥有公钥S与对应的私钥S’
  • S <—> S’ , C <—> C’
  • 客户端和服务端交换公钥(这里是明文传输,黑客也可以获取到公钥C与S)
  • 客户端拥有 公钥S 与 私钥C’ ,服务端拥有 公钥C 与 私钥S’
  • 客户端给服务端发信息:先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S’
  • 服务端给客户端发信息:先用C对数据加密,在发送,只能由客户端解密,因为只有客户端有私钥C’

问题:

  • 效率太低(每次客户端与服务端通信都要使用非对称加密)
  • 依旧有安全问题(MITM)

方案4: 非对称加密+对称加密(主要解决方案3的效率问题)(NO)

  • 服务端具有非对称公钥S和私钥S’
  • 客户端发起https请求,获取服务端公钥S
  • 客户端在本地生成对称密钥C,通过公钥S加密,发送给服务器.
  • 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥(真的吗? )
  • 服务器通过私钥S’解密,还原出客户端发送的对称密钥C.并且使用这个对称密钥加密给客户端返回的响应数据.
  • 后续客户端和服务器的通信都只用对称加密即可.由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义.
  • 此方案只解决了效率问题,任然没有解决安全问题(MITM攻击)

由于对称加密的效率比非对称加密高很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密.

中间⼈攻击: 针对上⾯的场景

在这里插入图片描述

在这里插入图片描述

引入证书

在这里插入图片描述
可以使⽤在线⽣成CSR和私钥:https://myssl.com/csr_create.html
形成CSR之后,后续就是向CA进⾏申请认证,不过⼀般认证过程很繁琐,⽹络各种提供证书申请的服务商,⼀般真的需要,直接找平台解决就⾏

理解数据签名

在这里插入图片描述

方案5: 非对称加密+对称加密+证书认证(YES)

在客⼾端和服务器刚⼀建⽴连接的时候,服务器给客⼾端返回⼀个证书,证书包含了之前服务端的公钥,也包含了⽹站的⾝份信息.
在这里插入图片描述

客⼾端进⾏认证:

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
  • 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到一个hash值(称为数据摘要),设为hash1.然后计算整个证书的hash值,设为hash2.对比hash1和hash2是否相等.如果相等,则说明证书是没有被篡改过的.

常⻅问题

为什么摘要内容在⽹络传输的时候⼀定要加密形成签名?

在这里插入图片描述

为什么签名不直接加密,而是要先hash形成摘要?

在这里插入图片描述

如何成为中间人?

在这里插入图片描述

总结

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值