在说HTTP前,一定要先介绍一下HTTP,这家伙应该不用过多说明了,大家每天都在用,每一次HTTP请求,都是一次TCP连接。遗憾的是,请求的内容在TCP报文中是明文传输的,任何人截取到请求都可以读取其中的内容,很尴尬。

数据加密

为了防止请求内容被人窃取,在网络传输的路上我们做不了手脚,那就只能对传输的数据报文上做手脚了。对报文内容进行加密就是其中的一种方法。

有一种加密算法叫做对称加密算法,即加密和解密使用同一个秘钥,使用这种算法对请求数据进行加密,中间人因为没有秘钥,无法读取其中的内容。但是,使用这种算法进行加密,肯定要同意秘钥,那秘钥在网络中传输同样存在被窃取的风险啊。

这时,出现了新的加密算法:非对称加密算法,它有两把钥匙,一把叫私钥,是只有自己知道的,另一个叫公钥,可以发到互联网山,随便谁都可以看到,也就是说,传输过程中即使被别人看到也无所谓。这时,A向B发消息时,可以先用B的公钥对数据进行加密,B收到消息后再使用自己的私钥进行解密,中间即使被窃取了,因为没有对应的秘钥,也无法对了数据进行解密。

但是,非对称加密算法要比对称加密算法慢上许多。一个折中的办法,先使用非对称加密算法来传输对称加密的秘钥,以确保秘钥安全送达,之后就可以使用对称加密算法来加密数据报文了。

中间人劫持

你以为现在可以高枕无忧了吗?你以为你可以放心安全的进行通信了吗?天真。

假设,你现在正在和A通信,来自灵魂的拷问:你怎么能确定和你通信的人是A呢?

我们假设,通信正常进行。在通信开始传输公钥的时候,请求被中间人C劫持了。C讲A的公钥换成自己的公钥发给了你,在你发送请求后,再讲你的信息解密,使用A的公钥进行加密,发送给A。这样,在你和A看来好像是在和彼此通信,其实所有的信息都经过了C,所有的信息都被C一览无余。

那么如何保证收到的公钥是A的呢?完犊子了,又回到开始的问题了,如何保证秘钥在网络中安全的传输。但这次,加密似乎救不了我们了,我们必须要确保收到的秘钥确实是A发来的,也就是说报文没有别中途篡改过。

数字证书

其实无法保证报文内容的关键,在于我们对于收到的公钥无法确定有没有被人修改过,那如果有一个我们信任的中间人S来传输这个公钥就可以了。问题来了,D的公钥传输中同样存在被修改的问题,拿到再找其他人来传输S的公钥么?这要下去简直没完没了,完全就是三次握手的翻版。

问题的根源是什么?我们没有一个可以信任的公钥,那么解决办法也很粗暴,我们在本地保存一个绝对信任的公钥,它不是通过互联网来获取的,而是预装在系统中的,也就是系统/浏览器预置的顶层CA证书。

这些预装信任的内容,就是CA证书。通过CA获取A的公钥时,获得的数字证书大概长这样:

当收到证书后,我们对信息通过童谣的hash算法计算出信息摘要,在用CA的公钥对数字签名进行解密,若解密后的信息摘要与我们计算的摘要相同,则可以认为信息没有被人修改过。验证流程如下:

难道这样就不拍别人篡改了么?不怕。因为我们已经拿到CA的公钥了,这是没有问题的。中间人因为没有CA的私钥,及时截取到信息,也无法对修改后的内容进行加密并生成对应的数字签名。

这样一来,信息的传输问题算是暂时告一段落了。(不知道什么时候就冒出了新的安全问题,毕竟道高一尺魔高一丈)

HTTPS

到这里,HTTPS介绍完毕,以上大概就是HTTPS的全部内容了。HTTPS的一次请求,大概流程如下:

  1. 浏览器发出HTTPS请求

  2. 服务器讲自己的数字证书返回

  3. 浏览器用预置的CA来验证证书,若没有问题,顺利拿到公钥

  4. 浏览器生成对称加密算法的秘钥,通过服务器的公钥进行加密,将报文发送给服务器

  5. 服务器用自己的私钥进行解密,得到对称加密的秘钥

  6. 可以开始用获得的对称加密秘钥进行通信了

揭开HTTPS的神秘面纱相关推荐

  1. 了解黑客的关键工具---揭开Shellcode的神秘面纱

    2019独角兽企业重金招聘Python工程师标准>>> ref:  http://zhaisj.blog.51cto.com/219066/61428/ 了解黑客的关键工具---揭开 ...

  2. [转]揭开正则表达式的神秘面纱

    揭开正则表达式的神秘面纱 关闭高亮 [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref.htm] 引言 正则表达式(regular expressio ...

  3. ASP.NET 运行时详解 揭开请求过程神秘面纱

    对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...

  4. 【翻译】揭开HTML5的神秘面纱

    写在前面的话: 这篇文章摘自Mozilla官网,主要针对HTML5和本地应用发表了一些.没有设计到技术,所以基本是逐字翻译,但愿我蹩脚的英语水平能把大师的 Chris Heilmann的思想整理明白. ...

  5. Azure Stack技术深入浅出系列6:Azure Stack一体机探究 — 揭开黑盒子的神秘面纱

    Azure Stack是微软公有云平台的延伸,为客户环境里提供接口和相关的功能.微软的Azure Stack安装在指定的合作伙伴的一体机中,并以一体机的形式部署到客户的混合云应用环境里的.2017年7 ...

  6. 揭开IDC行业神秘面纱

    揭开IDC行业神秘面纱 作为互联网价值产业链的其中重要环节,IDC行业一直被赋予神秘的面纱,IDC行业伴随着互联网发展需求而迅速成长,与整个互联网信息化的基础与应用紧紧地扣在一起.中国的IDC始于19 ...

  7. 服装界的小米? 揭开小虫米子的神秘面纱

    昨日,小虫米子对外宣布了双十二战绩,C店第一.整个淘宝.天猫女装第六的成绩格外惹眼.很多人都对这家名不见经传的淘品牌感到好奇,他并不像茵曼.韩都.裂帛.阿卡那样名声在外,一般名气是与销售额划等号的,可 ...

  8. 揭开PC-Lint9的神秘面纱

    前言 今天,又定位了一个令人懊恼的C++内存使用异常问题,最终结果,竟然是减少接口类的方法后,为了避免编译错误,顺手添加的强制类型转换导致的. 对于这样的问题,我们碰到很多很多次了.没有这样的问题,我 ...

  9. 未来已来?揭开量子计算机的神秘面纱

    从第一台现代计算机ENIAC的诞生到个人PC时代的降临,从互联网概念的提出到移动互联的疾跑,在这个信息年代里,变革正以前所未有的速度改变着我们熟悉的世界.熟悉的生活. 作为个人,我们早已习惯于智能计算 ...

最新文章

  1. 换了你你又会杀了谁(zz)
  2. zoj 1698 Easier Done Than Said?
  3. 【IMOOC学习笔记】多种多样的App主界面Tab实现方法(二)
  4. 效率达CPU一万倍、内含800万神经元:英特尔发布神经形态芯片超算
  5. 成功解决ConvergenceWarning: lbfgs failed to converge (status=1): STOP: TOTAL NO. of ITERATIONS REACHED L
  6. mac下解决mysql乱码问题
  7. 查缺补漏知识点(一)
  8. 【考试经验】脱离GRE苦海,30天逆袭贴
  9. 28款超级绿色版杀软,奉献给各位!【迅雷下载】
  10. 【Windows网络编程】完成端口IOCP原理及案例
  11. 达梦数据库磁盘空间满之多种解决办法
  12. 用python实现一个自动保存复制图片的功能
  13. 周转时间,平均周转时间,带权周转时间
  14. LevelDB使用入门
  15. 如何实现自定义串口通信协议?
  16. 科创人·36氪副总裁王坤:企服产品应重视使用者体验,36氪将推出中国版「魔力象限」
  17. 交易风云-MAM、PAMM、社区交易&KlipC:如何选择多账户管理系统
  18. Scratch 2.0的构建与二次开发手册
  19. 一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
  20. 惠普软件技术总监赵大平:IT与业务的结合

热门文章

  1. PID控制器开发笔记之三:抗积分饱和PID控制器的实现
  2. java后端获取客户端(用户)真实ip,原理
  3. BigDecimal的个人总结
  4. JAVA入门级教学之(匿名内部类)
  5. vscode编辑python_VSCode+Python开发环境
  6. linux下collada-dom编译,Building Collada
  7. 什么是面向对象_什么是面向对象?新手程序员必掌握的技能
  8. c语言中把各位上为奇数的数取出,下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在冲。 - 赏学吧...
  9. java 多进程多线程_Java并发编程原理与实战三:多线程与多进程的联系以及上下文切换所导致资源浪费问题...
  10. 手机投电脑_把王者荣耀投屏到电脑上玩更爽哦——投屏神器幕享