点击上方 "编程技术圈"关注, 星标或置顶一起成长

后台回复“大礼包”有惊喜礼包!

日英文

Life is too short to spend time regretting. If it's not the end, smile and keep on going.

生命太短,没时间留给遗憾。若不是终点,请微笑一直向前。

每日掏心话

花用尽全力,才在一年中盛放一次,美艳,而短暂,就像青春,不同的是,花有很多个一年,我们却只有一个一辈子。

责编:乐乐 | 来自:mokeyWie

链接:segmentfault.com/a/1190000023936425

编程技术圈(ID:study_tech)第 1166 次推文

往日回顾:入职腾讯第九年,我辞职了

     

   正文   

看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,HTTP有可能被中间人攻击和拦截,细思极恐。

1. HTTP 协议

在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。

1.1 HTTP 协议介绍

HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层。

HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC 7234、RFC 7235),通讯报文如下:

请求

POST http://www.baidu.com HTTP/1.1Host: www.baidu.comConnection: keep-aliveContent-Length: 7User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
wd=HTTP

响应

HTTP/1.1 200 OKConnection: Keep-AliveContent-Encoding: gzipContent-Type: text/html;charset=utf-8Date: Thu, 14 Feb 2019 07:23:49 GMTTransfer-Encoding: chunked
<html>...</html>

1.2 HTTP 中间人攻击

HTTP 协议使用起来确实非常的方便,但是它存在一个致命的缺点:不安全。

我们知道 HTTP 协议中的报文都是以明文的方式进行传输,不做任何加密,这样会导致什么问题呢?下面来举个例子:

小明在 JAVA 贴吧发帖,内容为我爱JAVA:

被中间人进行攻击,内容修改为我爱PHP

小明被群嘲
可以看到在 HTTP 传输过程中,中间人能看到并且修改 HTTP 通讯中所有的请求和响应内容,所以使用 HTTP 是非常的不安全的。

1.3 防止中间人攻击

这个时候可能就有人想到了,既然内容是明文那我使用对称加密的方式将报文加密这样中间人不就看不到明文了吗,于是如下改造:

双方约定加密方式

使用 AES 加密报文

这样看似中间人获取不到明文信息了,但其实在通讯过程中还是会以明文的方式暴露加密方式和秘钥,如果第一次通信被拦截到了,那么秘钥就会泄露给中间人,中间人仍然可以解密后续的通信:

在公众号后端顶级架构师后台回复“架构整洁”,获取一份惊喜礼包。

那么对于这种情况,我们肯定就会考虑能不能将秘钥进行加密不让中间人看到呢?答案是有的,采用非对称加密,我们可以通过 RSA 算法来实现。这个步骤实际操作也是比较简单的。

在约定加密方式的时候由服务器生成一对公私钥,服务器将公钥返回给客户端,客户端本地生成一串秘钥(AES_KEY)用于对称加密,并通过服务器发送的公钥进行加密得到(AES_KEY_SECRET),之后返回给服务端,服务端通过私钥将客户端发送的AES_KEY_SECRET进行解密得到AEK_KEY,最后客户端和服务器通过AEK_KEY进行报文的加密通讯,改造如下:

可以看到这种情况下中间人是窃取不到用于AES加密的秘钥,所以对于后续的通讯是肯定无法进行解密了,那么这样做就是绝对安全了吗?

所谓道高一尺魔高一丈,中间人为了对应这种加密方法又想出了一个新的破解方案,既然拿不到AES_KEY,那我就把自己模拟成一个客户端和服务器端的结合体,在用户->中间人的过程中中间人模拟服务器的行为,这样可以拿到用户请求的明文,在中间人->服务器的过程中中间人模拟客户端行为,这样可以拿到服务器响应的明文,以此来进行中间人攻击:

这一次通信再次被中间人截获,中间人自己也伪造了一对公私钥,并将公钥发送给用户以此来窃取客户端生成的AES_KEY,在拿到AES_KEY之后就能轻松的进行解密了。

中间人这样为所欲为,就没有办法制裁下吗,当然有啊,接下来我们看看 HTTPS 是怎么解决通讯安全问题的。

2. HTTPS 协议

2.1 HTTPS 简介

HTTPS 其实是SSL+HTTP的简称,当然现在SSL基本已经被TLS取代了,不过接下来我们还是统一以SSL作为简称,SSL协议其实不止是应用在HTTP协议上,还在应用在各种应用层协议上,例如:FTP、WebSocket。

其实SSL协议大致就和上一节非对称加密的性质一样,握手的过程中主要也是为了交换秘钥,然后再通讯过程中使用对称加密进行通讯,大概流程如下:

这里我只是画了个示意图,其实真正的 SSL 握手会比这个复杂的多,但是性质还是差不多,而且我们这里需要关注的重点在于 HTTPS 是如何防止中间人攻击的。

通过上图可以观察到,服务器是通过 SSL 证书来传递公钥,客户端会对 SSL 证书进行验证,其中证书认证体系就是确保SSL安全的关键,接下来我们就来讲解下CA 认证体系,看看它是如何防止中间人攻击的。

2.2 CA 认证体系

上一节我们看到客户端需要对服务器返回的 SSL 证书进行校验,那么客户端是如何校验服务器 SSL 证书的安全性呢。

权威认证机构

在 CA 认证体系中,所有的证书都是由权威机构来颁发,而权威机构的 CA 证书都是已经在操作系统中内置的,我们把这些证书称之为CA根证书:

签发证书

我们的应用服务器如果想要使用 SSL 的话,需要通过权威认证机构来签发CA证书,我们将服务器生成的公钥和站点相关信息发送给CA签发机构,再由CA签发机构通过服务器发送的相关信息用CA签发机构进行加签,由此得到我们应用服务器的证书,证书会对应的生成证书内容的签名,并将该签名使用CA签发机构的私钥进行加密得到证书指纹,并且与上级证书生成关系链。

这里我们把百度的证书下载下来看看:

可以看到百度是受信于GlobalSign G2,同样的GlobalSign G2是受信于GlobalSign R1,当客户端(浏览器)做证书校验时,会一级一级的向上做检查,直到最后的根证书,如果没有问题说明服务器证书是可以被信任的。

如何验证服务器证书

那么客户端(浏览器)又是如何对服务器证书做校验的呢,首先会通过层级关系找到上级证书,通过上级证书里的公钥来对服务器的证书指纹进行解密得到签名(sign1),再通过签名算法算出服务器证书的签名(sign2),通过对比sign1和sign2,如果相等就说明证书是没有被篡改也不是伪造的。

这里有趣的是,证书校验用的 RSA 是通过私钥加密证书签名,公钥解密来巧妙的验证证书有效性。

这样通过证书的认证体系,我们就可以避免了中间人窃取AES_KEY从而发起拦截和修改 HTTP 通讯的报文。

总结

首先先通过对 HTTP 中间人攻击的来了解到 HTTP 为什么是不安全的,然后再从安全攻防的技术演变一直到 HTTPS 的原理概括,希望能让大家对 HTTPS 有个更深刻的了解。

PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!

欢迎加入后端架构师交流群,在后台回复“学习”即可。

猜你还想看

阿里、腾讯、百度、华为、京东最新面试题汇集

图解 Git 工作原理,看了秒懂!

简单解析一下扫码登陆原理,简单到你想不到!

深圳一名程序员因跳槽违反《竞业协议》,赔偿腾讯 97.6 万元。。

BAT等大厂Java面试经验总结

别找了,想获取 Java大厂面试题学习资料

扫下方二维码回复「手册」就好了

嘿,你在看吗

记住看小电影前一定要检查网址是不是 HTTPS 的,不然…相关推荐

  1. 记住看小电影前一定要检查域名是不是 HTTPS 的!

    点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 来自:mokeyWie | 责编:乐乐 链接:segmentfault.com/a/119 ...

  2. 记住下次看小电影前一定要检查域名是不是 HTTPS 的!

    来自:mokeyWie | 责编:乐乐 链接:segmentfault.com/a/1190000023936425          正文    写在前面: 看小电影还是浏览正常网站,一定要检查是不 ...

  3. 记住,在看小电影前一定要检查下域名是不是 HTTPS 的

    看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,否则后果很严重!不信你看,最近看到一则消息,某员工因在上班时间上了1024网站,惨到试用期都没有过.... 细思极恐!!!! 为什么说 HT ...

  4. 记住!在看小电影前一定要检查下域名是不是 HTTPS 的

    看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,否则后果很严重!不信你看,最近看到一则消息,某员工因在上班时间上了1024网站,惨到试用期都没有过.... 细思极恐!!!! 为什么说 HT ...

  5. 记住下次看小电影前一定要检查一下域名是不是 HTTPS 的,别说小乐没提醒你……...

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「程序员小乐」,收看更多精彩内容 每日英文 If you conc ...

  6. 记住!看小电影前一定要检查一下域名是不是 HTTPS 的,不然....

    点击下方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 看小电影还是浏览正常网站,一定要检查是不是 HTTP ...

  7. 放假看小电影!一定要检查域名是不是 HTTPS ,不然......

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:00 更新文章,每天进步一点点... 看小电 ...

  8. 请牢记看小电影前一定要检查一下域名是不是 HTTPS 的,否则……

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 作者:mokeyWie https://segmentfau ...

  9. 记住下次看小电影前,一定要检查域名是不是 HTTPS 的!

    来自:mokeyWie | 责编:乐乐 链接:segmentfault.com/a/1190000023936425          正文    写在前面: 看小电影还是浏览正常网站,一定要检查是不 ...

  10. 看小电影没检查是HTTPS的,差点出事...

    "我是一个浏览器,每到夜深人静的时候,主人就打开我开始学习.为了不让别人看到浏览记录,主人选择了"无痕模式". 但网络中总是有很多坏人,他们通过抓包截获我和服务器的通信, ...

最新文章

  1. dhcpd命令--Linux命令应用大词典729个命令解读
  2. 世界软件出现十个拐点 中国软件几乎按兵不动
  3. kafka管理神器-kafkamanager
  4. python怎么实现数据可视化_数据之美,python实现数据可视化!
  5. 【scarletthln 关于算法的一点总结】
  6. python交易_Python实现银行账户资金交易管理系统
  7. 零基础学python语言_致初学者:零基础如何学好,Python这门编程语言?
  8. 自我投资,最好的方式就是写作
  9. 编译器——指令的汇编
  10. 07网络发展趋势:风险和机遇并存
  11. 微软制作win7启动U盘的工具
  12. 蓝桥杯题解 时间显示 Java答案
  13. 天下谁人不识“金” — SONY NW-WM1ZM2 索尼金砖二代测评
  14. win7无法连接虚拟磁盘服务器,win7系统电脑打开磁盘管理出现“无法连接虚拟磁盘服务”的解决方法...
  15. 微信小程序开发工具第一次使用,网络连接不上怎么办
  16. 正在进行 | 用友企业数智化财务峰会落地广州 高能不断
  17. 《给你一个团队你怎么带》笔记(绝多数为个人经验,仅供参考)
  18. 3.23早间BTC/ETH急剧回踩,短暂拉升等机会
  19. 电机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 已知最小小行星准备迎接人类探视

热门文章

  1. 电脑连接android手机测试,Android系统手机通过USB连接电脑上网
  2. 搜索引擎查找计算机硬盘信息,win7系统使用搜索引擎快速查找磁盘文件的方法【图文教程】...
  3. 计算化学系列教程-第一章-薛定谔方程
  4. 人工智能导论(3)——确定性推理(Certainty Reasoning)
  5. wps折线图如何画多条折线_如何用wps制作折线图
  6. magedu.N45019第一周作业
  7. 邮件的服务器密码不正确,企业邮箱foxmail提示接收密码错误解决方法
  8. php培训乱象,终南山隐居乱象:开隐居培训班、假道士宰客、网红打卡,简直可恶...
  9. 4Packet Tracer – 配置 VLAN
  10. 1-4 正弦和余弦