🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇
⭐ HTTPS ⭐
🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇
今日推荐歌曲: 在加纳共和国离婚(Acoustic Version) -- 菲道尔/Dior大颖 🎵🎵
系列文章目录
【网络原理 2】UDP 协议的报文结构和注意事项-CSDN博客
【网络原理 3】TCP协议的相关特性(三次握手,四次挥手)(万字详解)看完必懂 !-CSDN博客
【网络原理 4 】应用层中 服务器和客户端的传输-CSDN博客
【网络原理 5 】网络层中的 ” 主宰 “ IP 协议-CSDN博客
【网络原理 8】HTTP 协议的基本格式和 fiddler 的用法-CSDN博客
【网络原理 9】HTTP协议 请求 & 响应 超详解 看这篇就够-CSDN博客
【网络原理 10】HTTPS 协议 工作过程 超细节(精心配图)-CSDN博客
目录
前言
之前介绍了 HTTP 协议,这里是它的加密版。HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密保护数据传输安全的通信协议。它是在标准的HTTP协议上添加了SSL/TLS(Secure Sockets Layer/Transport Layer Security)加密层来提供安全性。
一、HTTPS是什么
HTTPS也是⼀个应⽤层协议.是在HTTP协议的基础上引⼊了⼀个加密层.
HTTP协议内容都是按照⽂本的⽅式明⽂传输的.这就导致在传输过程中出现⼀些被篡改的情况.
臭名昭著的"运营商劫持"
思考下,为啥运营商要进⾏劫持?
不⽌运营商可以劫持,其他的⿊客也可以⽤类似的⼿段进⾏劫持,来窃取⽤⼾隐私信息,或者篡改内容.
试想⼀下,如果⿊客在⽤⼾登陆⽀付宝的时候获取到⽤⼾账⼾余额,甚⾄获取到⽤⼾的⽀付密码..... 在互联⽹上,明⽂传输是⽐较危险的事情 ! ! !
HTTPS就是在HTTP的基础上进⾏了加密,进⼀步的来保证⽤⼾的信息安全
所以要对 HTTP 加密,加密就是把明⽂(要传输的信息)进⾏⼀系列变换,⽣成密⽂. 解密就是把密⽂再进⾏⼀系列变换,还原成明⽂.
二、HTTPS的⼯作过程 ⭐⭐⭐
既然要保证数据安全,就需要进⾏"加密". ⽹络传输中不再直接传输明⽂了,⽽是加密之后的"密⽂". 加密的⽅式有很多,
但是整体可以分成两⼤类: 对称加密 和 ⾮对称加密
1. 引⼊对称加密
对称加密其实就是通过同⼀个"密钥", 把明⽂加密成密⽂ , 并且也能把密⽂解密成明⽂.
一个简单的对称加密,按位异或。假设明文a=1234,密钥key=8888,则加密a^key得到的密文b为9834。然后针对密文9834再次进行运算b^key,得到的就是原来的明文1234。对于字符串的对称加密也是同理,每一个字符都可以表示成一个数字。当然,按位异或只是最简单的对称加密。HTTPS中并不是使用按位异或。
引⼊对称加密之后 , 即使数据被截获,由于⿊客不知道密钥是啥 , 因此就⽆法进⾏解密 , 也就不知道请 求 的真实内容是啥了 .
但事情没这么简单.服务器同⼀时刻其实是给很多客⼾端提供服务的.这么多客⼾端,每个⼈⽤的秘钥都 必须是不同的(如果是相同那密钥就太容易扩散了,⿊客也就能拿到了). 因此服务器就需要维护每个客⼾ 端和每个密钥之间的关联关系,这也是个很⿇烦的事情~
⽐较理想的做法,就是能在客⼾端和服务器建⽴连接的时候,双⽅协商确定这次的密钥是啥
但是如果直接把密钥明⽂传输,那么⿊客也就能获得密钥了
此时后续的加密操作就形同虚设了. **因此密钥的传输也必须加密传输!** 但是要想对密钥进⾏对称加密,就仍然需要先协商确定⼀个"密钥的密钥".
这就成了"先有鸡还是先有 蛋"的问题了.此时密钥的传输再⽤对称加密就⾏不通了.
就需要引⼊ ⾮对称加密.
2. ⾮对称加密
⾮对称加密要⽤到两个密钥,⼀个叫做"公钥",⼀个叫做"私钥".
公钥和私钥是配对的.最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多
• 通过公钥对明⽂加密,变成密⽂
• 通过私钥对密⽂解密,变成明⽂
也可以反着⽤
• 通过私钥对明⽂加密,变成密⽂
• 通过公钥对密⽂解密,变成明⽂
⾮对称加密的数学原理⽐较复杂,涉及到⼀些数论相关的知识.这⾥举⼀个简单的⽣活上的例⼦.
A要给B⼀些重要的⽂件,但是B可能不在.于是A和B提前做出约定:
B说:我桌⼦上有个盒⼦,然后我给你⼀把锁,你把⽂件放盒⼦⾥⽤锁锁上,然后我回头拿着钥匙来开锁 取⽂件.
在这个场景中,这把锁就相当于公钥,钥匙就是私钥.公钥给谁都⾏(不怕泄露),但是私钥只有B⾃⼰持 有.持有私钥的⼈才能解密.
• 客⼾端在本地⽣成对称密钥,通过公钥加密,发送给服务器.
• 由于中间的⽹络设备没有私钥,即使截获了数据,也⽆法还原出内部的原⽂,也就⽆法获取到对称密 钥
• 服务器通过私钥解密,还原出客⼾端发送的对称密钥.并且使⽤这个对称密钥加密给客⼾端返回的响 应数据.
• 后续客⼾端和服务器的通信都只⽤对称加密即可.由于该密钥只有客⼾端和服务器两个主机知道,其 他主机/设备不知道密钥即使截获数据也没有意义.
由于对称加密的效率⽐⾮对称加密⾼很多,因此只是在开始阶段协商密钥的时候使⽤⾮对称加密,后续 的传输仍然使⽤对称加密.
那么接下来问题⼜来了:
• 客⼾端如何获取到公钥?
• 客⼾端如何确定这个公钥不是⿊客伪造的?
黑客一般都是大佬,这点小伎俩,他可能稍稍出手,就把这两哥们耍的团团转。
3. 中间⼈攻击 (黑客出手)
⿊客可以使⽤中间⼈攻击,获取到对称密钥.
中间人攻击(Man-in-the-Middle Attack,简称MITM攻击)是一种常见的网络攻击方式。在中间人攻击中,攻击者会插入自己在通信双方之间,以窃听、篡改或伪装通信的内容。
中间人攻击的工作原理如下:
建立假冒的连接:攻击者在受害者与目标之间插入自己,并与受害者建立连接,同时与目标建立另一个连接,形成一个“中间人”。
窃听通信内容:攻击者在中间人位置上,可以窃听受害者和目标之间的通信内容,获取敏感信息,如登录凭据、银行账户信息等。
篡改通信内容:攻击者可以修改通信的内容,以达到欺骗、误导或破坏的目的。例如,篡改网页内容、修改传输的数据等。
伪装身份:攻击者可以伪装成受信任的实体,如网站、服务提供商或用户,来欺骗受害者,并获取其敏感信息或进行欺诈行为。
中间人攻击是一种隐蔽且危险的攻击形式,可以导致用户数据泄露、信息被篡改和身份被冒用。因此,采取适当的安全措施非常重要,以保护网络通信的安全性和隐私。
4. 引⼊证书
服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信 息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,
证书就如⾝份证,证明服务端公钥的权威性
这个证书可以理解成是⼀个结构化的字符串,⾥⾯包含了以下信息:
• 证书发布机构
• 证书有效期
• 公钥
• 证书所有者
• 签名(就跟签字画押类似)
• ......
需要注意的是:申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私 钥。这对密钥就是⽤来在⽹络通信中进⾏明⽂加密以及数字签名的。
5. 理解数据签名
签名的形成是基于⾮对称加密算法的,注意,⽬前暂时和https没有关系,不要和https中的公钥私钥搞 混了。
当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名,过程如 下:
1. CA机构拥有⾮对称加密的私钥A和公钥A'
2. CA机构对服务端申请的证书明⽂数据进⾏hash,形成数据摘要
3. 然后对数据摘要⽤CA私钥A'加密,得到数字签名S 服务端申请的证书明⽂和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了
6. 通过证书解决中间⼈攻击
在客⼾端和服务器刚⼀建⽴连接的时候,服务器给客⼾端返回⼀个证书.
这个证书包含了刚才的公钥,也包含了⽹站的⾝份信息.
当客⼾端获取到这个证书之后,会对证书进⾏校验(防⽌证书是伪造的).
• 判定证书的有效期是否过期
• 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
• 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到⼀个hash值(称为数 据摘要),设为hash1.然后计算整个证书的hash值,设为hash2.对⽐hash1和hash2是否相等.如 果相等,则说明证书是没有被篡改过的.
中间人有没有可能篡改该证书?
- 中间人篡改了证书的明文,由于他没有CA机构的私钥,所以无法hash之后用私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
- 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人
中间人整个掉包证书?
- 因为中间人没有CA私钥,所以无法制作假的证书(为什么? )
- 所以中间人只能向CA申请真证书,然后用自己申请的证书进行掉包
- 这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
- 永远记住:中间人没有CA私钥,所以对任何证书都无法进行合法修改,包括自己的
7. 常⻅问题
1. 为什么摘要内容在⽹络传输的时候⼀定要加密形成签名?
常见的摘要算法有:MD5和SHA 系列
以MD5为例,我们不需要研究具体的计算签名的过程,只需要了解MD5的特点:
- 定长:无论多长的字符串,计算出来的MD5值都是固定长度(16字节版本或者32字节版本)·
- 分散:源字符串只要改变一点点,最终得到的MD5值都会差别很大.
- 不可逆:通过源字符串生成MD5很容易,但是通过MD5还原成原串理论上是不可能的.
正因为MD5有这样的特性,我们可以认为如果两个字符串的MD5值相同,则认为这两个字符串相同.
理解判定证书篡改的过程:(这个过程就好比判定这个身份证是不是伪造的身份证,只是对内容的修改)
假设我们的证书只是一个简单的字符串 hello,对这个字符串计算hash值(比如md5),结果为BC4B2A76B9719D91
如果hello中有任意的字符被篡改了,比如变成了hella,那么计算的md5值就会变化很大.BDBD6F9CF51F2FD8
然后我们可以把这个字符串 hello和哈希值BC4B2A76B9719D91从服务器返回给客户端,此时客户端如何验证hello是否是被篡改过?
那么就只要计算hello的哈希值,看看是不是 BC4B2A76B9719D91即可.
2. 但3如果⿊客把hello篡改了,同时也把哈希值重新计算下,客⼾端就分辨不出来了呀.
(对内容 和 哈希值一起改)
所以被传输的哈希值不能传输明⽂,需要传输密⽂.
所以,对证书明⽂(这⾥就是“hello”)hash形成散列摘要,然后CA使⽤⾃⼰的私钥加密形成签名,将 hello和加密的签名合起来形成CA证书,颁发给服务端,当客⼾端请求的时候,就发送给客⼾端,中间 ⼈截获了,因为没有CA私钥,就⽆法更改或者整体掉包,就能安全的证明,证书的合法性。
最后,客⼾端通过操作系统⾥已经存的了的证书发布机构的公钥进⾏解密,还原出原始的哈希值,再进 ⾏校验.
3. 为什么签名不直接加密,⽽是要先hash形成摘要?
缩⼩签名密⽂的⻓度,加快数字签名的验证签名的运算速度
总结
HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密保护数据传输安全的通信协议。它是在标准的HTTP协议上添加了SSL/TLS(Secure Sockets Layer/Transport Layer Security)加密层来提供安全性。
HTTPS的工作原理如下:
-
客户端发起请求:客户端(通常是一个Web浏览器)向服务器发送一个HTTPS请求。
-
服务器证书验证:服务器将其数字证书发送给客户端。客户端通过验证服务器的证书来确认服务器的身份。这包括检查证书的合法性、是否由受信任的证书颁发机构签发以及证书中的域名与请求的域名是否匹配。
-
建立安全连接:客户端使用服务器证书中的公钥来加密一个随机生成的对称密钥,并发送给服务器。服务器使用其私钥解密客户端发送的对称密钥。
-
安全通信:客户端和服务器之间的通信使用对称密钥进行加密和解密。对称密钥只在握手阶段使用,并在握手完成后不再传输。
通过使用HTTPS,可以提供以下安全保护:
-
数据加密:HTTPS使用SSL/TLS协议对发送和接收的数据进行加密,防止第三方窃听者窃取或修改数据。
-
身份验证:HTTPS使用数字证书对服务器进行身份验证,确保客户端与合法服务器进行通信,防止中间人攻击。
-
数据完整性:通过使用加密和数字签名技术,HTTPS保证数据在传输过程中不被篡改或损坏。
HTTPS通常用于保护敏感信息的传输,如登录凭据、网上银行交易、信用卡信息等。作为标准的HTTP协议的加强版,它提供了更高的安全性和可信度,为互联网上的通信提供了一层重要的安全保护。
这里超级详细的介绍了 HTTPS 的加密过程,超级用心的在写,配图把自己配笑了哈哈哈哈😀😀
博客不易,希望可以帮助到大伙,动动小手点个赞我会开心很久,感谢阅览。