HTTPS加密及工作过程

一,HTTP为什么要加密

HTTPS是在HTTP的基础上,引入了一个加密层(SSL)

HTTP是明文传输的(不安全)

因为HTTP是明文传输的,于是在以前出现了一种现象:运营商劫持

比如你在网上下载一款软件,明明要下载的是一个音乐播放器,结果下载下来的是一个QQ,如图:

出现这种原因的过程:

对此,即使运营商不劫持,如果黑客盯上了,也是可能对你的信息安全造成一些影响

为了解决安全问题,最核心的要点,就是"加密"了。

以此,我们就引入了密码学,密码学中有几个重要概念:

明文:要传输的真实的数据,就是要表达是实际意思

密文:针对明文加密之后,得到的结果,往往是不直观的,不易理解的

加密和解密的过程中,涉及到一个关键的道具,称为密钥

根据密钥,有两种加密方式。分为对称加密和非对称加密:

对称加密:加密和解密,使用的是同一个密钥

非对称加密:加密和解密,使用的是两个密钥。这两个密钥,k1,k2,是成对的,可以使用k1来加密,此时就是k2解密,也可以使用k2加密,k1解密

两个密钥,就可以一个公开出去,称为"公钥",另一个自己保存好,称为"私钥"

二,HTTPS工作过程

只要针对HTTPS的数据进行解密了,就能够得到HTTP格式的数据

对于上述的运营商劫持,无论是修改referer还是修改返回的链接,其实本质上都是明文传输惹的祸

于是需要引入加密,对上述传输的数据进行保护,主要就是要针对header和body进行加密

1)引入对称加密:

引⼊对称加密之后,即使数据被截获,由于⿊客不知道密钥是啥,因此就⽆法进⾏解密,也就不知道请求 的真实内容是啥了.但事情没这么简单.服务器同⼀时刻其实是给很多客⼾端提供服务的.这么多客⼾端,每个⼈⽤的秘钥都 必须是不同的(如果是相同那密钥就太容易扩散了,⿊客就也能拿到了).因此服务器就需要维护每个客⼾ 端和每个密钥之间的关联关系,这也是个很⿇烦的事情~

⽐较理想的做法,就是能在客⼾端和服务器建⽴连接的时候,双⽅协商确定这次的密钥是啥~

但是如果直接把密钥明⽂传输,那么⿊客也就能获得密钥了~~此时后续的加密操作就形同虚设了.

**因此密钥的传输也必须加密传输!**

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

2)引入非对称加密

⾮对称加密要⽤到两个密钥,⼀个叫做"公钥",⼀个叫做"私钥". 公钥和私钥是配对的.最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多.

客⼾端在本地⽣成对称密钥,通过公钥加密,发送给服务器.

由于中间的⽹络设备没有私钥,即使截获了数据,也⽆法还原出内部的原⽂,也就⽆法获取到对称密钥

服务器通过私钥解密,还原出客⼾端发送的对称密钥.并且使⽤这个对称密钥加密给客⼾端返回的响 应数据.

后续客⼾端和服务器的通信都只⽤对称加密即可.由于该密钥只有客⼾端和服务器两个主机知道,其 他主机/设备不知道密钥即使截获数据也没有意义.

上述操作下,仍然存在重大的安全漏洞,黑客仍然有办法获取到对称密钥key的

3)中间人攻击

  1. 服务器具有⾮对称加密算法的公钥S,私钥S'

  2. 中间⼈具有⾮对称加密算法的公钥M,私钥M'

  3. 客⼾端向服务器发起请求,服务器明⽂传送公钥S给客⼾端

  4. 中间⼈劫持数据报⽂,提取公钥S并保存好,然后将被劫持报⽂中的公钥S替换成为⾃⼰的公钥M, 并将伪造报⽂发给客⼾端

  5. 客⼾端收到报⽂,提取公钥M(⾃⼰当然不知道公钥被更换过了),⾃⼰形成对称秘钥X,⽤公钥M加 密X,形成报⽂发送给服务器

  6. 中间⼈劫持后,直接⽤⾃⼰的私钥M'进⾏解密,得到通信秘钥X,再⽤曾经保存的服务端公钥S加密后,将报⽂推送给服务器

  7. 服务器拿到报⽂,⽤⾃⼰的私钥S'解密,得到通信秘钥X

  8. 双⽅开始采⽤X进⾏对称加密,进⾏通信。但是⼀切都在中间⼈的掌握中,劫持数据,进⾏窃听甚 ⾄修改,都是可以的

针对上述问题,如何解决?

最关键的一点,客户端拿到公钥的时候,要能有办法验证,这个公钥是否是真的,而不是黑客伪造的。

4)引入证书

服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信 息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端 公钥的权威性

证书中会包含一系列信息:服务器的主域名,公钥,证书有效期,签名等

需要注意的是:申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私 钥。这对密钥对⼉就是⽤来在⽹络通信中进⾏明⽂加密以及数字签名的。

数据签名:

签名的形成是基于⾮对称加密算法的,注意,⽬前暂时和https没有关系,不要和https中的公钥私钥搞混了

当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名,过程如下:

  1. CA机构拥有⾮对称加密的私钥A和公钥A'

  2. CA机构对服务端申请的证书明⽂数据进⾏hash,形成数据摘要

  3. 然后对数据摘要⽤CA私钥A'加密,得到数字签名S 服务端申请的证书明⽂和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了

5)通过证书解决中间人问题

在客⼾端和服务器刚⼀建⽴连接的时候,服务器给客⼾端返回⼀个证书. 这个证书包含了刚才的公钥,也包含了⽹站的⾝份信息.

当客⼾端获取到这个证书之后,会对证书进⾏校验(防⽌证书是伪造的)

. • 判定证书的有效期是否过期

• 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)

. • 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到⼀个hash值(称为数 据摘要),设为hash1.然后计算整个证书的hash值,设为hash2.对⽐hash1和hash2是否相等.如果相等,则说明证书是没有被篡改过的.

中间⼈有没有可能篡改该证书?

• 中间⼈篡改了证书的明⽂

• 由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名

• 如果强⾏篡改,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改, 证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈

中间⼈整个掉包证书?

• 因为中间⼈没有CA私钥,所以⽆法制作假的证书

• 所以中间⼈只能向CA申请真证书,然后⽤⾃⼰申请的证书进⾏掉包

• 这个确实能做到证书的整体掉包,但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客⼾端依旧能够识别出来。

• 永远记住:中间⼈没有CA私钥,所以对任何证书都⽆法进⾏合法修改,包括⾃⼰的

相关推荐
阿巴~阿巴~5 分钟前
深入解析IP分片:从原理到现代实践的全面指南
运维·服务器·网络·网络协议·tcp/ip·ip
阿巴~阿巴~14 分钟前
IPv4地址的边界与智慧:特殊用途、枯竭挑战与应对策略全景解析
运维·服务器·网络·网络协议·tcp/ip·ipv4·ipv4地址枯竭
源远流长jerry20 分钟前
TCP 与 TLS 层面 HTTP/1 升级到 HTTP/2
网络协议·tcp/ip·http
三两肉32 分钟前
从明文到加密:HTTP与HTTPS核心知识全解析
网络协议·http·https
北京耐用通信34 分钟前
工业通信中的“工业战狼”!耐达讯自动化CAN转PROFIBUS网关
网络·人工智能·物联网·网络协议·自动化·信息与通信
晚枫歌F37 分钟前
基于DPDK实现UDP收发理解网络协议
网络·网络协议·udp
Tao____41 分钟前
物联网平台二开
java·网络·物联网·mqtt·网络协议
wj319321 小时前
ping一个ip打印无法访问目的主机一次,然后打印请求超时问题定位过程
服务器·网络·嵌入式硬件·网络协议·tcp/ip·局域网网内
code_li1 小时前
P2P加速 vs. CDN加速
网络·网络协议·p2p
阿巴~阿巴~2 小时前
路由的本质:从逐跳转发到全球互联的决策机制解析
网络·网络协议·tcp/ip·智能路由器·ip·tcp·路由