JavaEE初阶:HTTPS
要传输的明文数据,通过加密变成密文进行传输。接收端解密得到明文,处理明文数据后,返回加密后的数据给对端,如此反复。明文的加密需要密钥密文的解密也需要密钥,加密和解密的密钥可能相同也可能不相同,具体看引入哪种加密方式(对称加密/非对称加密);1.本章一共讲到5种密钥(对称密钥,服务器的非对称密钥,第三方机构的非对称密钥)。2.重点讲解了对称加密和非对称加密的运用;3.中间人攻击原理;4.引入证书,讲
HTTPS超细讲解,看完你绝对会!
1. HTTPS是什么
- HTTPS也是一个应用层协议,是基于HTTP协议增加了一个安全层。HTTPS的S就是Safety。
- HTTPS=HTTP+(SSL/TLS) ;SSL和TLS是安全层,TLS是SSL的升级版。
谈到HTTPS肯定会想到“加密”,加密是HTTPS协议的核心功能。以前网络通信数据都是明文传输,运营商可以篡改请求或响应为自己谋取利益,如臭名昭著的“运营商劫持”。
2. HTTPS诞生背景及应用场景
请求和响应都要经过运营商的机器(移动、电信等),在未推出HTTPS前,数据都是明文传输,只要抓到数据包直接就能看到传输的内容,数据还容易被篡改,就像被监控了一样,极其恐怖!
比如以前在浏览器点击下载“贪吃蛇”,结果给我下载了“QQ”,这就发生了运营商劫持(当然也有可能是浏览器搞得鬼)。
为了网络安全,后续推出了HTTPS协议,直到现在几乎都不用HTTP协议传输数据了。
HTTPS可对网络传输的数据进行加密和解密,防止别人或组织 修改/调包 数据包。
3. 什么是“加密”
要传输的明文数据,通过加密变成密文进行传输。接收端解密得到明文,处理明文数据后,返回加密后的数据给对端,如此反复。
明文的加密需要密钥,密文的解密也需要密钥,加密和解密的密钥可能相同也可能不相同,具体看引入哪种加密方式(对称加密/非对称加密);
4. HTTPS工作过程
4.1 对称加密
对称加密的意思是,生成一个密钥。客户端和服务端各拿着一个相同密钥。客户端用这个密钥加密,服务端用密钥解密;服务端用这个密钥加密,客户端用密钥解密。如图
这样即使黑客拿到数据,他也看不到里面的内容。
注意:加密时密钥是一把锁,解密时密钥是一把钥匙,一个密钥既可以加密也可以解密。

上面客户端和服务器用密钥痛快加解密通信前,还有至关重要的一步:客户端生成了密钥(客户端和服务端都能生成密钥,这里假定客户端生成),它要把密钥是多少通过请求先告诉服务器,这样后续双方才能安全通信。但问题出现了,客户端告诉服务器密钥是多少的这条请求是明文传输的,这样黑客黑客就获取到密钥了:
如果密钥“88888”也加密后传输呢?这显然也不行,给密钥加密的密钥也得明文传输给服务器,所以套再多层也无济于事。那怎么办呢?——》对称密钥采用非对称加密传输!!
注意:生成对称/非对称密钥的算法是开源的,谁都能生成密钥,但是(暴力)破解密钥难度极大,就算用现全球最强的计算机破解也需花费数万亿年。
4.2 非对称加密
非对称加密的意思是,生成两把密钥一把公钥和一把私钥。
- 可以公钥加密明文,私钥解密。
- 可以私钥加密明文,公钥解密。
非对称加密的运算速度很慢,因此不适合应用在业务数据(业务数据通常是大量的)中。密钥的加密传输不是业务数据,可以采用非对称加密。
对密钥进行非对称加密流程:
服务器生成公钥和私钥,将公钥抛出去,谁都可以用公钥加密数据,解密需要私钥,私钥服务器自留。对称密钥通过服务器抛出的公钥加密后传输给服务器,黑客没有私钥不能解密看到明文。后续客户端和服务器就能使用对称密钥安全传输了(其实还没完接着看)。如图:
你以为这样传输密钥很安全?其实上面密钥的非对称加密操作,跟脱了裤子站在黑客面前别无二致,为什么呢,因为有种操作叫中间人攻击。
4.3 中间人攻击
要用公钥加密,首先得获取公钥。获取公钥过程中,黑客可以发起中间人攻击,如图:

解释:
服务器和黑客都生产了一对非对称密钥。
1.客户端向服务器发出请求,询问服务器的公钥,请求和响应都经过路由器;
2.服务器响应的结果包含自己的公钥——》pub1,黑客将公钥换成自己的公钥pub2,传给客户端。
3.客户端以为pub2是服务器的公钥,就使用pub2加密对称密钥,传给服务器。
4.黑客用pri2解密获得对称密钥,防止露馅,把明文中的对称密钥改成黑客的对称/非对称密钥后再用pub1加密传给服务器。
5.服务器用pri1可以解密pub1加密的密文,因此获得了pub2,认为这是客户端的对称密钥。
6.服务器用pub2加密响应返回给客户端,黑客使用pri2解密,将响应用客户端的对称密钥加密,再传给它。
看完你肯定心想“nb”。黑客当中间人,只要演技够,就不会被发现。为了解决中间人攻击引入了证书。
5. 引入证书
回忆发生中间人攻击的原因:
1.客户端无法分辨返回的公钥是否是服务器的,就像唐三藏分辨不出妖怪。
引入证书可以解决问题。
5.1 证书是什么
注意:
- 公钥加密,可以私钥解密;私钥加密,也可以私钥解密。
- 电脑/手机等 出厂安装系统时已经内置了可信任的、高安全性的CA公钥,除非你安装了黑客的盗版系统。
- 内置的密钥也会定期改变。
证书是公司向可信任的第三方机构申请(CA)下来的数字证书,证书本身明文传输,但证书中含有使用CA私钥加密的数字签名;不用担心客户端在获取CA公钥时受到“中间人攻击”,CA公钥已经内置了 。
5.1.1 证书包含信息
- 证书的颁布机构是谁?
- 证书的有效期
- 服务器的公钥是什么?
- 服务器的域名是啥?
- 证书的数字签名
5.1.2 数字签名
证书数字签名就是加密的校验和。校验和是用证书的1~4等全部信息,通过计算而来的一串数据。CA的私钥对校验和进行加密,成为“数字签名”。
5.2 证书的作用

客户端不直接请求要公钥了,而是向服务器请求证书!
不必担心黑客修改证书中的服务器公钥,因为客户端收到证书后会校验:
- 证书的数字签名通过CA公钥解密后,得到一个校验和。
- 将除数字签名外,证书所有的信息通过计算后得到一个校验和。如果证书被修改,则计算出的校验和与数字签名解密后的校验和不相同。
最后把两个校验和进行比较,如果相同则OK,后续使用证书中的公钥加密对称密钥;不同则丢弃这个证书。
解答疑惑:
- 黑客自己向第三方机构申请一个证书,然后直接把整个服务器响应的证书调包,这是不太可行的,因为申请证书需要域名,就算你有域名,CA也会有一定检查。而且就算你整个替换了,你输入的URL和返回的证书中的域名不匹配,浏览器也会弹出一个红色页面,告诉你“网站不安全,是否继续访问”。
- 黑客破不了CA的私钥,计算密钥的难度太大了,因此通过修改证书公钥并修改数字签名,从而达到攻击的操作几乎不可能的。
总结:
1.本章一共讲到5种密钥(对称密钥,服务器的非对称密钥,第三方机构的非对称密钥)。
2.重点讲解了对称加密和非对称加密的运用;
3.中间人攻击原理;
4.引入证书,讲解了证书内容、证书作用和客户端校验证书的流程。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)