前言
常常被问及HTTPS的S是什么,以前只是知道就是HTTP利用SSL进行加密的传输,并不知道细节,所以看了点视频看了点书,抛砖引玉,希望各位大佬不吝指教。
HTTP
HTTP是TCP/IP五层模型里面的应用层的其中一种协议,使用的SOCKET传输层协议是TCP协议。既然没有加密就是用的明文传输,和其他诸如TELNET、FTP等协议一样都不是很安全。
这个是参考资料:https://www.cnblogs.com/qishui/p/5428938.html
HTTPS
即为HTTP+SSL,SSL协议相当于在传输层和应用层中间加了一个保障。
下面主要讲几个概念,在SSL协议中会用到
对称加密
对称加密算法,利用密钥加密,同时进行解密
客户端传输的是密文
服务端传输的也是密文
但是服务端向所有人公开服务,因此公钥是公开的
所以数据一旦被偷窥或者中转就是不安全的
非对称加密
服务端持有私钥和公钥,分发给客户端公钥
客户端传输由公钥加密的密文,服务端使用私钥解密
服务端使用由私钥加密的密文,客户端使用公钥解密
但是服务端向所有人公开服务,因此公钥是公开的
因此偷窥者也可以解开服务端的密文
同时可以在本地篡改数据加密后传给服务端(只不过篡改服务端数据这个过程难度增加了),
但是理论上说客户端的数据难以解密(可以篡改,无法偷窥客户端),服务端的数据难以篡改(可以偷窥,无法篡改服务端)
对称加密和非对称加密结合
服务端持有私钥和公钥,分发给客户端公钥
首先使用非对称加密,客户端和服务端商议密钥及其他细节,比如说:
客户端生成随机数并使用公钥进行加密传输给服务端,服务端解密后得到随机数
但是商议过程比较复杂下面说。
确认之后,服务端和客户端使用随机数作为密钥进行对称加密传输
中间人问题
但是如果偷窥者作为代理人介入,偷窥者也存在自己伪造的公钥和私钥,并且知道加密、解密算法,且他也可以拿到服务端的公钥
那么他
作为客户端的服务端,可以向客户端发送伪造公钥,并获得服务端的随机数
并且他
作为服务端的客户端,可以向服务端发送伪造随机数,服务端也就使用这个随机数
密钥被窃取,这样他是可以拿到全部数据并加以篡改。
这个时候对称加密和结合型加密也就失效了。
这个就是中间人问题,是不是有点像汪家人?哦就是那个搞黑产的他。
如何避免中间人问题?
我们引入了第三方证书的概念,一般说的是CA证书
公钥交由CA统一保管,客户端直接使用证书获取公钥
一般来说CA公钥直接写死在操作系统,并把私钥授权给服务端
服务端向客户端发送证书,客户端使用对应的公钥。
如果中间人使用伪造证书(非CA证书),客户端就会提醒证书不安全,数据就停止传输,直到获得客户端的手动确认,数据才可以进行传输。
那么偷窥者的伪造公钥就不好用了,他也不知道CA私钥,无法解密客户端数据,无法获得随机数,则无法篡改也无法偷窥客户端和服务端数据。
HTTPS的技术细节
服务端使用HTTPS加密以后,除了服务端端口开启,额外启动SSL服务器在443端口
客户端在访问HTTPS打头的服务器时候,浏览器默认地向服务端的443端口发请求进行商议
(我们不能奢求每个人都是懂电脑的,比如我就不知道怎么修改客户端的SSL请求端口,因此不建议服务端修改443端口以免用户体验十分崩溃)
商议完成后得到密钥,即可使用对称加密算法回80端口做正常的服务
密钥商议过程
(不是特别准确,道听途说的,有什么不对可以指正)
一.
客服端向服务端发起请求(携带SSL版本、自己支持的加密算法列表)
服务端向客户端发送返回(携带携带SSL版本确认、自己挑选出的其中一个加密算法、一个HASH算法,以及其CA证书)
二.
客户端进行证书认证,之后的随机数都用HASH算法加密(其实这里的随机数依然是可偷窥的,因此以下省略HASH算法一步)
客服端向服务端发送使用非对称加密算法加密客户端生成的随机数1
服务端使用非对称解密算法获得随机数1并向客户端发送随机数2
三.
客户端对随机数1和随机数2进行计算得到随机数3,并传输随机数3
服务端对随机数1和随机数2进行计算得到随机数3,并校验随机数3
四.
服务端对随机数1、2、3进行计算得到随机数4,进行传输。
同时利用随机数1、2、3进行另一个计算得到key
客户端对随机数1、2、3进行计算得到随机数4,进行校验。
同时利用随机数1、2、3进行另一个计算得到key
SSL服务器的作用到此为止,END
这个key才是最终的随机数密钥,可以看到密钥不在网络层面进行传输
致谢
B站UP主free-coder的视频,我们的程序员又免费了,实在是太伟大了!
https://www.bilibili.com/video/BV1w4411m7GL
真的是愉快的一晚上,能够通过互联网学到更多的互联网知识,妥妥正循环,希望这种氛围能够无限套娃下去。
对了最近还看了一些关于telnet协议和RFC文档的资料,只想说想进步就要掉头发啊~~