面试官:有了解过HTTPS吗?说一下他的原理吧
复制代码
https是创建在SSL(Secure Sockets Layer 安全套接层)上的网络安全协议,最初由NetScape公司提出,以后由IETF标准化为TLS(Transport Layer Security 安全传输层协议),其端口为443。html
本文全长1900字左右,全文阅读大概须要10分钟,以后你将收获:node
当咱们学习HTTP的时候,确定使用过抓包工具(wireshark, fiddler)帮助咱们认识HTTP协议。回忆一下就知道,抓包工具不管是get请求仍是post请求都能准确截取其中传输内容,若是想要隐藏传输内容,就必须进行密文传输,就像战争年代的电报密码,即便被截取也不能破解其中的内容。git
让咱们设想这样一个情景:海绵宝宝想和蟹老板秘密协商新的蟹黄堡配方,若是让你来设计加密过程,你有几种方法呢?
1.海绵宝宝和蟹老板约定一个密钥,传输和解读都经过这个密钥解密,这个密钥称为公钥。面试
双方使用相同密钥进行加密通信算法
2.当心谨慎的蟹老板有一个只有本身知道的密钥(称为私钥)和公钥,他把公钥发给海绵宝宝,海绵宝宝能够经过公钥解密私钥加密的消息,可是公钥加密的消息只有私钥能解开,这在必定程度上作到了单向安全。浏览器
那么HTTPS中用的哪一种加密方式呢?
若是采用对称加密,那么蟹老板和全部人都拥有同一个密钥,这无异于没有加密!!!安全
让咱们回到情景中。
痞老板听闻消息,企图在协商过程经过中间人的方式截取蟹黄包配方。bash
如今美人鱼战士和企鹅男孩登场了,他们保证做为一个权威中间机构为你们提供认证服务,负责为你们发放统一的公钥。服务器
若是你是痞老板,你有什么方法能够再次窃取消息呢?
显然不能经过简单替换公钥来窃取了,海绵宝宝只能解开美人鱼战士颁发的证书,那我也去申请一个证书,直接替换整个证书不就能够从而替换掉公钥了吗?网络
来自:蟹堡王
加密算法:MD5
公钥:xxxx(已经过私钥加密,可经过公钥解密)
复制代码
海绵宝宝只要经过企鹅男孩的公钥提取到“蟹堡王”+“MD5” 计算出一个公钥,与证书内的公钥进行对比,就能够验证证书是否通过替换,以下图。
带有签名的证书
对比发现证书被替换
虽然痞老板依旧能够截取证书,可是他却不能替换其中任何的信息,以下:
来自:痞老板工厂
加密算法:MD5
公钥:djawdn888
复制代码
此时海绵宝宝能够发现来自不是蟹堡王而拒绝信任,而且
痞老板工厂 + MD5 !== djawdn888
复制代码
如今假设蟹堡王+ MD4 = aaaa
,那只要修改公钥为aaaa不就能够经过海绵宝宝的验证了吗?痞老板的证书修改以下:
来自:蟹堡王
加密算法:MD4
公钥:aaaa
复制代码
实际上并不能,尽管能够修改公钥,可是前面提到,公钥通过企鹅男孩的私钥加密,如今海绵宝宝发现用企鹅男孩的公钥打不开了!因而发现证书已经被篡改了,从而结束通信。 这即是数字签名的意义。
综上,用一句话总结https:在https协议下,服务器与客户端经过非对称加密的方式协商出一个对称加密的密钥完成加密过程。其中数字证书的做用是避免公钥被替换,而数字签名的做用是校验公钥的合法性。
明白了HTTPS的原理,握手过程就十分简单,总结以下:
1.客户端:发送random1 + 支持的加密算法 + SSL Version等信息
2.服务端:发送random2 + 选择的加密算法A + 证书
3.客户端:验证证书 + 公钥加密的random3
4.服务端:解密random3,此时两端共有random1,random2,random3,使用这3个随机数经过加密算法计算对称密钥便可。
以上只有random3是加密的,因此用random1 + 2 + 3 这3个随机数加密生成密钥。
HTTPS优点:密文,安全性
HTTPS劣势:协商过程低效,影响用户访问速度
1.客户端的公钥从哪里来的?
权威机构的公钥是由操做系统和浏览器共同维护,预先存储在本地的。
2.握手过程为何要用3个随机数?
一方面,https的握手过程当中出现的3个随机数,只有第三个是加密的随机数。另外一方面,因为不少主机可能产生弱随机数,所以3个叠加使用更接近随机,比较安全。