当前位置:首页 » 《随便一记》 » 正文

【计算机网络】HTTP协议详解(十三):安全的HTTPS_戴陵FL的博客

20 人参与  2022年02月26日 12:51  分类 : 《随便一记》  评论

点击全文阅读


安全的HTTPS

文章目录

  • 安全的HTTPS
  • 一、HTTPS协议概述
    • 1.TLS协议
    • 2.HTTPS协议特点
      • (1)为什么要有HTTPS?
      • (2)对称加密与非对称加密
      • (3)HTTPS的加密概述
  • 二、HTTPS对性能的影响


一、HTTPS协议概述

1.TLS协议

HTTPS可以认为是 HTTP + TLS
TLS是传输层加密协议,它的前身是SSL协议
TLS协议在传输层与应用层之间,TLS实际上是TCP之上建立了一个加密通道
在这里插入图片描述
TLS协议主要有5个部分组成:应用数据层协议 + 握手协议 + 报警协议 + 加密消息确认协议 + 心跳协议

2.HTTPS协议特点

(1)内容加密——以加密后数据来进行通信,防止中间者截取、篡改数据
(2)身份认证——由于HTTPS协议利用了证书的机制,保证用户访问的是想要的内容,即使被中间者DNS劫持到第三方站点,也会提醒用户可能被劫持
(3)数据完整性——防止数据被第三方内容冒充、篡改

以上三点都是依靠HTTPS的证书认证的机制来实现的,下面进行详细介绍

(1)为什么要有HTTPS?

HTTP与HTTPS是两种不同的网络传输协议,本质上大有不同,最大的不同就是HTTP使用明文传输
——HTTP完全以明文传输,非常不安全,容易被 “中间人攻击” ——被中间人截取数据包、恶意篡改

例如我们在百度通过某个关键字进行搜索,中间者完全能够嗅探这个消息,就可以做出在结果页面中恶意插入一条广告,甚至直接被劫持走使无法访问结果页面等窃取客户隐私、篡改数据的恶意行为

中间者——指的是数据从客户端到服务器中间必须经过的一些网络节点如WIFI热点、路由器、防火墙、代理、缓存服务器等——所以要谨慎使用公共场合的WIFI,很容易受到中间人攻击

——为了弥补这个漏洞,HTTPS对数据进行加密后再传输

(2)对称加密与非对称加密

加密算法一般分为两种:
1.对称加密(密钥加密):加密和解密使用的都是一个相同的密钥

通信双方事先约定好加密方式,并且约定好一个随机生成的密钥,就比如发送方、接受方约定使用AES加密,密钥是XXXX,之后收发的数据都是发送方发送时先使用密钥对数据加密,接受方收到时同样使用这个密钥对数据进行解密

这样做相比明文发送虽然安全了很多,但是还是存在安全漏洞:因为刚开始时,约定加密方式、密钥的第一次通信还是使用明文,若这第一次通信就被中间者拦截了,密钥信息就被泄露了,中间人可以使用密钥解密后续密文,仍然不够安全——非对称加密来解决这个问题

2.非对称加密(公钥加密):加密和解密使用不同的密钥

通信双方通信时:
(1)首先接收方向发送方提供了一个公钥:KEY-public
(2)发送方使用对称加密对数据进行加密,密钥为:KEY-AES,同时使用公钥KEY-public将密钥KEY-AES加密,然后将密文和用公钥加密后的密钥发送给接收方
(3)接收方收到密文,使用私钥KEY-private + 公钥KEY-public的组合才能解密出密钥KEY-AES,然后使用密钥KEY-AES解密出密文

这样就使得第三方中间人因为没有私钥,即使截取了公钥,也无法解密出密文的密钥

但是还是存在安全漏洞:
(1)第三方中间人从一开始截取到公钥时,就偷天换日,生成一套自己的公钥+私钥,将自己的公钥发送给发送方,发送方无法感知,以为这就是原始公钥
(2)发送方使用冒牌公钥对密文的密钥进行加密,然后发出数据包
(3)中间人截取密文,因为发送方使用了中间人的公钥进行加密,所以中间人使用自己的私钥顺利解密出密文的密钥,从而可以解密出密文,同时中间人因为先前截取了原始公钥,中间人使用原始公钥重新将密钥进行加密,伪装成正确的密文发送给接收方
(4)接受方和发送方继续进行加密通信,却不知密钥已经泄露了

(3)HTTPS的加密概述

由于前面非对称加密还是存在缺陷,所以这个时候有必要引入一个第三方,这个第三方就是一个权威的证书颁发机构

什么是证书呢?证书包含以下几个信息:
证书颁发机构 + 服务端地址 + 机构私钥加密(服务端公钥) + 机构私钥加密(证书签名)

加密大致流程:
(1)服务端将自己的公钥server-public-key发给证书颁发机构
(2)证书颁发机构也有自己的一对公钥、私钥,机构使用私钥加密服务端公钥server-public-key,并将加密后的结果加上服务端网址生成一个证书签名sign=【server-public-key】+ 服务端网址
(3)证书机构再次用私钥将证书签名进行加密,将加密后证书签名密文【sign】发给服务端
(4)客户端与服务端进行通信时,服务端先将证书签名密文【sign】发给客户端
(5)客户端收到证书后先验证证书的真伪,怎么验证呢?由于浏览器及操作系统已经维护了所有权威证书机构的名称及其公钥,所以客户端通过证书知道了是哪个机构,就可以查询出对应机构的公钥,并用来解密出证书的签名原文sign=【server-public-key】+ 服务端网址
(6)客户端使用同样的签名规则,自己也生成一个证书签名,然后两个证书签名比对一致,则说明证书有效
(7)验证证书成功后,客户端继续利用机构的公钥解密出服务端的公钥server-public-key,然后后面就和之前的非对称加密一样了,先使用对称加密的密钥对数据加密,然后使用服务端公钥server-public-key加密对称加密的密钥,最后将密文都发给服务端
(8)服务端使用公钥server-public-key + 私钥 解密出对称加密的密钥,然后解密出数据密文

若中间人这时也向权威机构申请一个自己的证书,然后将服务器发给客户端的证书替换为自己的证书,但是证书签名由服务端网址加上服务端公钥密文一起生成的,并且通过机构的私钥加密,所以中间人并没有办法篡改


二、HTTPS对性能的影响

1.协议交互所增加的网络RTT(返回时延——发送端发送数据开始 至 发送端收到来自接收端的确认所经过的时间)

忽略HTTP、HTTPS都需要的DNS解析的步骤来进行对比:

HTTP:
用户请求时,首先3次握手建立TCP连接,然后开始HTTP请求/响应

HTTPS:
第一步:考虑到大部分情况下,用户不会手动输入HTTPS前缀的地址来访问网站,如直接输入www.baidu.com而不是https://www.baidu.com,这时首先是一个HTTP协议的请求(HTTP GET),然后服务器返回302要求客户端重定向强制跳转到https://www.baidu.com,这时由于服务器、端口发生变化,因此需要重新3次握手建立TCP连接

第二步:建立TCP通信后,客户端与浏览器进行TLS第一次完全握手(协商密钥交互算法、对称加密算法、内容一致性交换算法、证书签名算法等,客户端获取到证书后,也需要验证证书的有效性(是否过期、是否撤销等))然后CA域名解析、Oscp请求响应

第三步:然后进行TLS第二次完全握手(密钥协商)

第四步:进行数据请求响应

2.HTTPS会消耗CPU资源,需要增加大量的机器(非对称、对称加解密需要占用较大CPU资源,但是也可以进行优化)


点击全文阅读


本文链接:http://zhangshiyu.com/post/35399.html

加密  密钥  证书  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1