【JavaEE初阶系列】——HTTPS协议

目录

👩🏻‍💻Https协议

[💻"加密" 是什么](#💻"加密" 是什么)

💻加密的两种方式

🎓对称加密

🎓非对称加密

💻https的工作过程

🎓先引入"对称加密"

🎓再引入"非对称加密"

🎓中间人攻击

🎓解决"中间人攻击"------公证机构


👩🏻‍💻Https协议

当前网络上,主要都是HTTPS了,很少能见到HTTP,实际上HTTPS也是基于HTTP(前面讲过HTTP的各个方面的内容,对于HTTPS同样适用),只不过HTTPS在HTTP基础之上,引入了"加密机制"。引入HTTPS防止你数据被黑客篡改(尤其是反针对 运营商劫持)

下载一个 天天动听
未被劫持的效果, 点击下载按钮 , 就会弹出天天动听的下载链接 .

已被劫持的效果 , 点击下载按钮 , 就会弹出 QQ 浏览器的下载链接

由于我们通过网络传输的任何的数据包都会经过运营商的网络设备 ( 路由器 , 交换机等 ), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改 .
点击 " 下载按钮 ", 其实就是在给服务器发送了一个 HTTP 请求 , 获取到的 HTTP 响应其实就包含了该 APP 的下载链接. 运营商劫持之后 , 就发现这个请求是要下载天天动听 , 那么就自动的把交给用户的响应给篡改 成 "QQ 浏览器 " 的下载地址了 .

不止运营商可以劫持 , 其他的 黑客 也可以用类似的手段进行劫持 , 来窃取用户隐私信息 , 或者篡改内容 .
试想一下, 如果黑客在用户登陆支付宝的时候获取到用户账户余额, 甚至获取到用户的支付密码.....
在互联网上 , 明文传输是比较危险的事情 !!!


我们进入一个店,我们连店里的wifi,其实这种操作是很危险的。 任何人都能访问,黑客是否可能入侵到这个路由器里,并对经过路由器的数据包进行抓包分析呢?甚至说,黑客可以把自己伪装成和商场路由器一样的设备。你设备访问网络的数据,可就都是经过黑客的设备,假设你的支付宝密码,微信密码,银行卡密码,在传输过程中,被黑客劫持了,非常危险。

HTTPS 就是在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全


💻"加密" 是什么

83 版 <<火烧圆明园>> , 有人要谋反干掉慈禧太后. 恭亲王奕䜣给慈禧递的折子. 折子内容只是扯一扯家常, 套上一张挖了洞的纸就能看到真实要表达的意思.

  • 明文: "当心肃顺, 端华, 戴恒" (这几个人都是当时的权臣, 后来被慈禧一锅端).
  • 密文: 奏折全文
  • 密钥: 挖了洞的纸.
  • 真正要表达的"原始信息"称为"明文",也就是当心肃顺,端华,戴恒。
  • 折子内容只是扯一扯家常 ,也就是掩盖了原始的信息,称为"密文" (加密之后得到的)
  • 带有窟窿的纸:能够把密文还原成明文,也能够把明文转成密文。 密钥

明文+密钥 =》密文

密文+密钥 =》明文

  • 加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文 .
  • 解密就是把 密文再进行一系列变换, 还原成 明文 .

在这个加密和解密的过程中 , 往往需要一个或者多个中间的数据 , 辅助进行这个过程 , 这样的数据称为 ( 正确发音 yue 四声 , 不过大家平时都读作 yao 四声 ) .


💻加密的两种方式

在密码学中,使用密钥加密,有两种主要的方式

🎓对称加密

对称加密,也就是加密和解密使用的密钥是同一个密钥。

设密钥为key

明文+key=》密文

密文+key=》明文

实际上,这里的加密和解密,涉及到一系列的复杂的数学运算。

🎓非对称加密

非对称密钥,一个称为"公钥",一个称为"私钥"(公钥就是可以公开的,私钥是自己藏好的)

明文+公钥=》密文 明文+私钥=》密文

密文+私钥=》明文 或者 密文+公钥=》明文

用一个钥匙加密,用一个钥匙解密。

举个例子:

邮箱,有些小区,单元楼下,都有邮箱。提供一把锁(公锁,就是发给邮递员),和一把钥匙(私钥,你自己持有),邮递员把你的信通过这把锁,锁到你的信箱里(使用公钥加密),然后你去拿的时候用钥匙开启锁头,拿到信(使用私钥解密),前提是锁和钥匙是配对的(公钥和私钥也是配对的)


💻https的工作过程

目标是 针对http这里的header和body进行加密。(body里面可能会存在密码之内的)

🎓先引入"对称加密"

1.先引入对称加密

客户端使用密钥进行对明文对称加密,然后发出请求,如果中间黑客手里没有密钥,黑客就无法获取到加密之前的内容了,此时到达服务器,服务器就拿着同一个密钥进行解密。
上面的情况确实很美好,但是我们想想,一个重要的问题:服务器不是只和一个客户端通信,而是和很多客户端通信。(一个邮递员可以给一栋楼的家庭寄邮件)

这些客户端使用的 对称密钥 是相同的嘛? (邮递员就拿着一个钥匙去解一栋楼的邮件箱嘛?肯定是拿了一大把钥匙去)

之前有个新闻,高考完了之后,报志愿,网上填报志愿,每个考生都有一个账号和密码,登录网站就可以填写志愿,由于密码默认值就是身份证后6位,这就意味着你的账号很容易别人给登录的,有些人会趁机篡改别人的志愿填报。
此时要求每个客户端对应的密钥都不同,现在就需要每个客户端,在和服务器建立连接的时候,就把密钥给生成出来(涉及到一些随机数机制在里面,保证每个客户端生成的密钥都不同)客户端再把自己的密钥通过网络传输给服务器。如果密钥被黑客截获了,这不就凉了嘛。

如何让密钥更安全的到达服务器呢?需要针对密钥进行加密

是否再搞一个密钥2,使用密钥2对上面的密钥进行加密呢??(此时还得想办法把密钥2也传输给服务器)无论引入多少个密钥,你套上几层,都是有危险的。

🎓再引入"非对称加密"

2.为了解决上述安全传输密钥的问题,引入了"非对称加密"

非对称加密中,有一对密钥,公钥和私钥

可以使用公钥加密,私钥解密,或者使用私钥加密,公钥解密。

服务器生成一对公钥和私钥,服务器把公钥返回给客户端,服务器自身把私钥藏好(谁都不给),客户端这边仍然也生成对称密钥,使用服务器的公钥,对对称密钥进行加密,得到了密钥的密文,然后发出密文请求,黑客拿到加密后的对称密钥是无能为力的,公钥加密需要私钥解密,私钥只有服务器才有,黑客手里没有,然后只能给服务器,然后服务器手里持有私钥,服务器很容易就能解密出对称密钥是啥,于是服务器就能得到原始的对称密钥,就是888888了。


🎓中间人攻击

3.对于上述对称加密+非对称加密过程中,还存在一个bug------中间人攻击

毒战(孙红雷/古天乐主演的)孙红雷就是缉毒警察,古天乐是毒枭。

古天乐为了立功,就想协助孙红雷抓住其他的毒枭。另外有俩个毒枭A,B。A和B本身是不认识的,都只认识古天乐,古天乐就撮合他们交易。

本来时A和B约好了时间地点,碰头交易,古天乐就带着孙红雷,让孙红雷扮演B和A进行交易,再让孙红雷扮演A和B交易。孙红雷扮演A与B交易,孙红雷扮演B和A交易。(A和B感觉上好像是在直接交易,实际上已经被孙红雷在其中已经插入了一腿)

服务器提前生成好了一对公钥pub1,和私钥pri1,将公钥pub1返回给客户端,返回给客户端的过程中黑客入侵设备,此时黑客也生成一对非对称密钥,其中公钥是pub2,私钥是pri2,然后黑客就返回pub2给客户端,客户端不知道pub2是黑客生成的公钥,以为就是服务器的,于是就使用pub2针对对称密钥进行加密了,然后黑客收到加密的对称密钥之后,因为这个密钥是使用pub2加密,需要使用pri2解密,黑客手里当然有pri2(它自己生成的),黑客解密之后,拿到了对称密钥。(由于对称密钥,黑客在刚才的过程中,已经拿到了,所以此时加密传输的数据对于黑客来说已经一览无余了),然后黑客使用服务器刚才的pub1重新对对称密钥加密的,进一步的发送给服务器,重新使用pub1加密,就是为了瞒天过海,不要让服务器发现其中的端倪,服务器收到数据之后,使用pri1进行解密,这个解密是完全成功的,服务器也收到了对称密钥。


🎓解决"中间人攻击"------公证机构

之所以能进行中间人攻击,关键在于客户端没有"分辨能力",客户端不知道当前这个公钥是不是黑客伪造的。这里的分辨不能靠自证,引入第三方的可以被大家都信任的"公证机构",公证机构说这个公钥是正确的,不是被伪造的,我们就是可以信任的。

客户端拿到了证书,也就拿到了证书中的公钥,客户端就需要验证这个公钥是否是服务器最初的公钥(是否是被黑客篡改了)------证书的校验

**证书:**是一段结构化的数据,这段数据中就包含了一些重要的信息,比如网站的域名,服务器的公钥,证书的过期时间....数字签名),颁发证书的时候,公证机构就会针对证书的各个属性,计算出一个校验和,并且针对这个校验和进行加密,就得到了数字签名。这个加密也是非对称加密,公证机构,自己生成一对公钥和私钥(和服务器的公钥私钥是不一样的),公证机构就会自己持有私钥,公钥就会发布给各个客户端设备(往往公钥都是内置在系统中的,安装了操作系统,就会自带公证机构的公用)------公证机构,就会使用自己的私钥,对校验和进行加密,得到数字签名。
如果进行校验?核心机制就是 数字签名=》被 加密 后的校验和(校验和:拿着你数据的每个字节,带入公式,就能算出一个结构数字,称位校验和。把这个数据和校验和一起发送给对方,对方再按照和校验和一起发送给对方,对方再按照同样的方式再算一遍校验和,如果对方自己算的校验和收到的校验和一样,就认为数据再传输过程中,没有改变过。)

此时,客户端拿到了数字签名,就可以通过系统内置的公证机构的公钥,进行解密了,得到了最初的校验和,客户端再重新计算一遍这里的校验和,和解密出来的校验和进行对比,如果校验和一致,就可以认为证书没有篡改过,公钥就是可信的(服务器原始的公钥)。

在上述机制下,黑客就无法对证书内容进行篡改了,即使篡改,也很容易被发现。

当黑客收到证书之后,如果直接修改里面的公钥,替换成自己的,客户端在进行证书校验的时候,就会发现校验和不一致了,客户端就可以认为是篡改过了。(客户端这边往往就会弹出一些对话框来警告用户,存在安全风险)

那么黑客替换公钥之后,能否自己替换掉数字签名,自己算一个呢?不能的,校验和算好,针对校验和加密,需要使用公证机构 的私钥,才能进行的,黑客没有这个私钥,如果黑客拿到自己的私钥加密,客户端也就无法使用公证机构的公钥解密了,公证机构的公证是客户端系统自带的,黑客无法替换。
结合上述过程,证书就是可信的,通过了校验,就说明公钥就是服务器原始的公钥了。
黑客是否能自己申请一个证书,完全替换掉呢。服务器的证书呢?

行不通的,申请证书,需要提交资料,其中就有网站的主域名,认证机构自然就会认证这个域名是否是你所有的。


https加密:

  • 1.对称加密,加密业务数据
  • 2.非对称加密,加密对称密钥
  • 3.中间人攻击(客户端无法分辨)
  • 4.使用证书,校验服务器的公钥

20岁的愿望就是早日独立,附加条件:经济独立。

相关推荐
C++忠实粉丝1 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
Gworg2 小时前
创建HTTPS网站
安全·https·ssl
C++忠实粉丝4 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
Estar.Lee4 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
蝶开三月4 小时前
php:使用socket函数创建WebSocket服务
网络·websocket·网络协议·php·socket
G丶AEOM4 小时前
SSL/TLS,SSL,TLS分别是什么
网络·网络协议·网络安全
木子_lishk4 小时前
gateway 支持同时使用 https 和 http访问
https·gateway
Koi慢热5 小时前
路由基础(全)
linux·网络·网络协议·安全
刽子手发艺7 小时前
WebSocket详解、WebSocket入门案例
网络·websocket·网络协议
速盾cdn11 小时前
速盾:CDN是否支持屏蔽IP?
网络·网络协议·tcp/ip