记住!在看小电影前一定要检查下域名是不是 HTTPS 的
看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,否则后果很严重!不信你看,最近看到一则消息,某员工因在上班时间上了1024网站,惨到试用期都没有过。。。。
细思极恐!!!!
为什么说 HTTPS 是安全的呢?下面先看看详细的 HTTPS 原理,看完你就理解了。
HTTP 协议
在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。
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.1
Host: www.baidu.com
Connection: keep-alive
Content-Length: 7
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36wd=HTTP
响应
HTTP 中间人攻击
HTTP 协议使用起来确实非常的方便,但是它存在一个致命的缺点:不安全。
我们知道 HTTP 协议中的报文都是以明文的方式进行传输,不做任何加密,这样会导致什么问题呢?下面来举个例子:
小明在 JAVA 贴吧发帖,内容为我爱JAVA:
被中间人进行攻击,内容修改为我爱PHP
小明被群嘲
可以看到在 HTTP 传输过程中,中间人能看到并且修改 HTTP 通讯中所有的请求和响应内容,所以使用 HTTP 是非常的不安全的。
防止中间人攻击
这个时候可能就有人想到了,既然内容是明文那我使用对称加密的方式将报文加密这样中间人不就看不到明文了吗,于是如下改造:
双方约定加密方式
使用 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 有个更深刻的了解。
记住!在看小电影前一定要检查下域名是不是 HTTPS 的相关推荐
- 记住,在看小电影前一定要检查下域名是不是 HTTPS 的
看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,否则后果很严重!不信你看,最近看到一则消息,某员工因在上班时间上了1024网站,惨到试用期都没有过.... 细思极恐!!!! 为什么说 HT ...
- 记住下次看小电影前一定要检查一下域名是不是 HTTPS 的,别说小乐没提醒你……...
点击上方 "程序员小乐"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「程序员小乐」,收看更多精彩内容 每日英文 If you conc ...
- 记住!看小电影前一定要检查一下域名是不是 HTTPS 的,不然....
点击下方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 看小电影还是浏览正常网站,一定要检查是不是 HTTP ...
- 请牢记看小电影前一定要检查一下域名是不是 HTTPS 的,否则……
点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 作者:mokeyWie https://segmentfau ...
- 记住下次看小电影前一定要检查域名是不是 HTTPS 的!
来自:mokeyWie | 责编:乐乐 链接:segmentfault.com/a/1190000023936425 正文 写在前面: 看小电影还是浏览正常网站,一定要检查是不 ...
- 记住看小电影前一定要检查域名是不是 HTTPS 的!
点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 来自:mokeyWie | 责编:乐乐 链接:segmentfault.com/a/119 ...
- 记住下次看小电影前,一定要检查域名是不是 HTTPS 的!
来自:mokeyWie | 责编:乐乐 链接:segmentfault.com/a/1190000023936425 正文 写在前面: 看小电影还是浏览正常网站,一定要检查是不 ...
- 放假看小电影!一定要检查域名是不是 HTTPS ,不然......
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:00 更新文章,每天进步一点点... 看小电 ...
- 看小电影没检查是HTTPS的,差点出事...
"我是一个浏览器,每到夜深人静的时候,主人就打开我开始学习.为了不让别人看到浏览记录,主人选择了"无痕模式". 但网络中总是有很多坏人,他们通过抓包截获我和服务器的通信, ...
最新文章
- gabor小波matlab,用matlab实现gabor小波对图片的纹理特征提取【转】
- HDU - 5572 An Easy Physics Problem(几何-碰撞问题)
- postgres+socket.io+nodejs实时地图应用实践
- 用循环语句求2^0+2^1+........+2^63 (C语言)
- Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- 开发利器之IntelliJ IDEA学习笔记
- Qt4_在次线程中使用Qt的类
- [转]服务器监控 UptimeRobot 简明使用手册
- 数据结构之 二叉树---求二叉树后序遍历和层次遍历(先建树,再遍历)
- Linux字符设备驱动
- 汇编语言属于计算机科学,汇编语言是一种依赖于计算机的低级程序设计语言吗...
- Button点击事件的五种写法
- cucumber rest assured做接口测试
- java输入一个整数对应英文星期_C语言实验——输入数字星期,输出英文(switch语句)...
- vue element-ui el-form表单验证表单验证,数值输入验证踩坑
- 给小朋友讲故事——食盐的重要性实验
- hangfire支持mysql_abp 使用 hangfire结合mysql
- 网站建设凸显效果的配色原则
- iOS 解决报错 Module file /Users/anmo/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/3FOJ1MTM...
- prach---发端
热门文章
- 转:MPEG中面向沉浸式视觉体验的标准化活动(虞露)
- 军师旅团营连排班各有多少人
- 我在 GitHub 黑市买“水军”:一万颗 star 只要 4000 多元,人人都能“一夜爆火”...
- 机智云开发平台一键生成小程序,低成本将智能产品快速推向市场
- java开发转行软件实施理由,技术详细介绍
- 在Suse Linux 11 SP4中启动eclipse时的Failed to load module pk-gtk-module异常
- Effective java 总结1 - 创建和销毁对象
- 某计算机屏幕的分辨率,计算机屏幕分辨率[Illustration]
- 微信征途获取服务器列表失败,征途手游回档微信进不了是咋回事 | 手游网游页游攻略大全...
- flash播放必备控件flash.ocx(64/32位)