HTTPS笔记

前言

常常被问及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文档的资料,只想说想进步就要掉头发啊~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 主要记录学习工作流程的笔记 资料 Http基础知识学习(四),了解HTTPS 通俗理解数字签名,数字证书和http...
    英勇青铜5阅读 5,732评论 0 7
  • HTTPS就是将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保证传输数...
    zziazm阅读 2,839评论 0 2
  • 以下内容大部分是从网上搜索到的,个人认为好理解(大多数博客看的有点云里雾里),同时加入了部分自己的看法。 1、ht...
    hao_yu阅读 2,870评论 0 0
  • 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采...
    失忆的程序员阅读 1,319评论 0 2
  • Https笔记 还是为了面试才去了解的HTTPS,话说这么看起来面试真的能让人快速学习很多东西! 为什么要有HTT...
    CSU_IceLee阅读 1,475评论 0 0