2019独角兽企业重金招聘Python工程师标准>>>

###开篇

相信程序猿们都有所了解https,就我个人而言一个月前我只知道https连接是安全的,加密了的,但是具体怎么加密的,证书是怎么认证的,为什么安全,我说不出来一二三。如果你跟我有一样的情况,那我们一起来探明它吧。

###https连接过程

我们先来个简明概要的: ####超简版

  1. 客户端(浏览器) -> 服务器(网站): hello服务器 , 加密算法a,b,c,hash算法d,e,f,ssl版本x.x
  1. 服务器(网站) -> 客户端(浏览器):选择a加密算法 和e hahs算法,我的证书
  2. 客户端 (浏览器)-> 服务器(网站):hash值hash1,消息message1,加密了的随机数secret1
  3. 服务器(网站) ->客户端(浏览器):hash值 hash2 消息message2
  4. 后续开始加密通信

看完之后,是不是啥也没懂,O(∩_∩)O哈哈~,不要急,接着看下更详细的,记得要跟上面的对比下:

####详细版

  1. 客户端向服务器say hello

客户端(浏览器) -> 服务器(网站):hello服务器,我支持a,b,c 加密算法和 d,e,f hash算法,支持ssl版本是 x.x

  1. 服务器收到后,选择一组算法连带着证明自己的证书一并发送给客户端

服务器(网站) -> 客户端(浏览器):我选择 a 加密算法 和 e hash算法 还有我的证书(表明公钥,有效期,拥有者,签名者 bla,bla)

  1. 客户端验证证书的合法性,生成一个随机数 123,将要发送的消息(hello)使用e hash算法,算好hash值 hash1 ,使用加密算法a ,用随机数加密要发送的消息(hello)得消息message1,用证书中的公钥加密随机数得 secret1

客户端 (浏览器)-> 服务器(网站): hash值hash1,消息message1,加密了的随机数secret1

  1. 服务器用自己的私钥将secret1解密得随机数123,再使用随机数123通过加密算法a 解密消息message1得到hello,再通过算法e 算出消息hello的hash值 hash1,与传过来的hash值比对一致,正确。 一致之后,服务器自己选择一条消息(hello,too),使用hash算法e 算出hash值 hash2,使用随机数123加密消息(hello,too)得消息message2

服务器(网站) ->客户端(浏览器):hash值 hash2 消息message2

  1. 验证成功

后续开始加密通信,使用的是随机数123和加密算法 a 来加密要通信的信息,并用hash算法 e 来计算要通信的信息

好了,大致通信就是这个过程,当然上述还有很多地方需要解释,只是想给大家一个宏观上的流程,之后我会一一列举解释的。

  • 保护世界的算法-RSA算法
  • 对称加密和hash算法
  • 伪随机数,猜不透的伪随机
  • 信任是根本-证书,CA认证

###保护世界的算法-RSA算法 这个标题起的太霸气了,但对RSA来说真的是当之无愧。因为https的安全就是基于RSA算法不会被攻破的基础上的,如果以后RSA算法可以被攻破,那计算机的世界就没有安全可言了。算法原理我自己还没弄的十分懂,所以我就不班门弄斧了,我能理解的就是,RSA算法是一种非对称算法,什么又是非对称算法呢?就是加密和解密不用同一个密钥,分公钥和私钥,你用公钥加密只能用私钥才能解密,反之同理私钥加密只能用公钥解密。如果想了解原理,附上,阮一峰的网络日志-《RSA算法原理(一)》,话说解释的已经很好了,但是我还是没太懂o(╯□╰)o,数学真是捉急啊。

###对称加密和hash算法 对称加密,相比于非对称加密就是,加密解密都需要同一个密钥,目前主流的有:DES、3DES、AES 等等。 hash算法,其实这个也好解释,像我们编程语言中都会有hash算法,最常用的就是hashcode方法,其实hash的本质就是摘取原信息的一部分来运算得到一个可以代表原信息的token串,当然hash算法都存在所谓的碰撞,hash的作用就是可以快速的来验证信息的相等或不等(虽然有一定的碰撞几率,但是在很多情况下可以忽略),比较有名的hash算法:MD4、MD5、SHA-1等等。

https中使用加密算法加密通信过程中信息,使用的密钥是浏览器和服务器都拥有的随机数,建立一次连接用一个随机数,而hash的用处就是来保证信息在这个过程中完整性以及不被替换。

###伪随机数,猜不透的伪随机 java中的random相信大家都用过,那就是一种伪随机数。浏览器生成的伪随机数一定要达到近似的随机,否则被猜到每次生成的数那这https连接也就没有意义了。 这里的随机数,在握手之后就用来浏览器和服务器的通信的密钥了,所以重要性可想而知。

###信任是根本-证书,CA认证 最后,就是CA证书啦,这个我要多费点唾沫O(∩_∩)O~~。 我们先回顾上述的https建立连接的过程,其中服务器端将一个证书发送给客户端,证书中包含公钥和所属的单位以及有效期。只有客户端信任了这个证书,我们才能进行下面的步骤。 好关键的来了,首先这个证书是谁颁发的,我们怎么判断证书为合法的呢?

证书是CA颁发的,也就是认证机构,他们去负责验证网站的合法性以及给网站生成证书。CA也就是这个过程中的第三方,说到底我们还是需要无条件的去信任这个第三方,如果没有这个信任也就无从来判断信息的合法性了。

验证合法性,浏览器中都会内置CA机构的根证书,如图:

这些都是浏览器信任的根证书,服务器发过来的证书都是以根证书为基础的后续枝叶。这个还要说一下,通过根来验证后续的证书合法性的具体做法,也就是利用了RSA非对称加密,CA在颁发证书的时候用自己的私钥加密一条信息放在颁发的证书里,只有对应CA的公钥才能解密。 我们来看看百度的https的证书

那么问题又来了(好问的小孩),如果浏览器没有内置某个认证机构的根证书呢?

如图:

这就是咱们大名鼎鼎的12306,哈哈,让我笑五分钟,收。浏览器内置的证书都是对机构高度信任的,像咱这个人家都不认的,这也是为了我们安全,如果我们手动把证书安装到浏览器中,以后12306随便签名一个证书,我们都会......。留下想象空间。

###关键点

个人认为整个https通信中,有几处至关重要的点,也是我们平时自己网站需要注意的。

  1. 私钥:简直是忒重要了,要是让别人那到这个,那不就是想干啥干啥了,要是我一定锁到小金库中。整个https握手的过程中,私钥只使用了一次,之后就是用随机数当做密钥通信了。这样就算让你获取到了密钥,也只局限这一次,并且保证了私钥没有在网络中传输,大大提高了安全性。

  2. 随机数的生成方式: 要是把浏览器的随机数生成方式,那任你什么算法,通通都没用了,所以随机数生成的方式是一个很大的课题啊。

  3. 证书,第三方,整个安全体系我们还是要取信任第三方,生活中也是这样,我们整个社会的经济也是建立在信用基础上的。但是我用程序猿的思维想象,如果我取得一个著名CA的控制权,我岂不是取得了互联网上大多数电脑的控制权?想想也挺爽的哈。

###最后发言 本想把本文写的简单点,但是能力有限,又写成了一篇流水文了,抱歉抱歉。笔者花了大概三周的时间看了这方面的文章,感觉也学到了不少东西,就把自己所接受到的知识,转成直白点的话,叙述了一遍。文中如果有什么理解不对的地方,还望指出,帮助学习。

参考文章:

《数字证书原理》(推荐) 《How does HTTPS actually work?》 阮一峰的网络日志-《图解SSL/TLS协议》 阮一峰的网络日志-《SSL/TLS协议运行机制的概述》 阮一峰的网络日志-《RSA算法原理》 伯乐在线-《HTTPS是如何保证连接安全:每位Web开发者都应知道的》 伯乐在线-《HTTPS连接的前几毫秒发生了什么》 coodoing-《HTTPS工作原理和TCP握手机制》 果壳-《HTTPS那些事(一)HTTPS原理》 果壳-《HTTPS那些事(二)SSL证书》

转载于:https://my.oschina.net/OpenSourceBO/blog/488374

悟空帮你理解https相关推荐

  1. 深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求(上)

    2019独角兽企业重金招聘Python工程师标准>>> 深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求 一.引言 本篇博客主要讨论如何在客户端与服务端之间进行HTTPS ...

  2. 一文帮你理解模型选择方法:AIC、BIC和交叉验证!

    一文帮你理解[模型选择方法]:AIC.BIC 和交叉验证! 本文先讲透模型选择的基本思想,再逐一叙述几种比较典型和常用的模型选择方法,希望可以帮助你理解. 一.模型选择的基本思想 模型选择的核心思想就 ...

  3. 轻松理解https,So easy!

    作者:翟志军 https://showme.codes/2017-02-20/understand-https/ 本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这 ...

  4. 也许,这样理解 HTTPS 更容易

    本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于"还原 ...

  5. 也许,这样理解HTTPS更容易

    https://juejin.im/post/5b8367b1e51d453884361fc3 摘要: 本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表H ...

  6. java-信息安全(九)-基于DH,非对称加密,对称加密等理解HTTPS

    概述 java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS 如果想要理解好https,请尽量了解好以上信息等. 参看文章: http://www.ruanyifeng.com/blog/ ...

  7. 一分钟理解 HTTPS 到底解决了什么问题

    本文原作者"虞大胆的叽叽喳喳",原文链接:jianshu.com/p/8861da5734ba,感谢原作者. 1.引言 很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说 ...

  8. 一文帮你理解什么是深层置信网络(DBN)

    翻译 | 林椿眄 编辑 | SuiSui 前言 随着机器学习的进步和深度学习的出现,一些工具和图形表示被逐渐用来关联大量的数据.深度置信网络(Deep Belief Networks)本质上是一种具有 ...

  9. 也许,这样理解 HTTPS 更容易!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟志军 来源 | showme.codes/2 ...

最新文章

  1. 经典算法题每日演练——第六题 协同推荐SlopeOne 算法
  2. 想成为一个数据科学家却不知道从何下手?这份路线图带你打开数据科学大门!...
  3. 比特币现金扬声器系列II将领先的比特币一起带来
  4. 与年轻人“玩在一起”的QQ音乐,正抢跑音娱赛道?
  5. VTK:图表用法实战
  6. 下载 infoq 网站视频
  7. Arduino_esp32_WiFi代码
  8. 小孩用计算机做作业怎么表达,计算机作业
  9. Kamailio 简介
  10. java并发访问_Java并发访问
  11. 北京理工大学计算机学院赵曜,北理工学子参加第十届蓝桥杯全国软件和专业人才大赛取得佳绩...
  12. 【毕业答辩】学位论文答辩ppt指南!
  13. 2017广东工业大学程序设计竞赛决赛:G. 等凹数字(数位DP)
  14. linux系统下Opencv4.1.1编译安装,以及增加子函数和python中调用
  15. 【Android学习笔记】ONTOUCHEVENT, ONCLICK及ONLONGCLICK的调用机制
  16. 34 模板方法模式(模板方法设计模式)详解
  17. 光纤中的非线性光学效应
  18. 研究生能合作发表论文吗?
  19. slideUp()方法和slideDown()方法
  20. html5猜颜色游戏,好看漂亮的html5网页特效学习笔记(3)_猜猜下一个颜色是什么?...

热门文章

  1. 来看看阿里新人入职培训PPT
  2. PCB对信号速率的影响
  3. Phoenix综述(史上最全Phoenix中文文档)
  4. 龙尚U9507 4G模块调试小结
  5. 《计算机世界》封面报道:广告联盟7宗罪
  6. Unity3D动画游戏设计算法 --脚本生命周期
  7. 开启Moto X,Moto G,Moto E的隐藏设置
  8. 兼容IE8的file单文件上传(jquery.form+formdata)
  9. 轻量服务器购买+宝塔面板安装
  10. fba游戏rom下载