HTTPS简介
HTTPS:https是http与ssl的结合,为了解决http明文传输致使信息泄露的问题。ssl经过公钥和私钥保证客户端和服务器之间的通信加密,由权威机构办法的数字证书杜绝了中间人攻击的可能。默认端口为443。web
SSL须要到ca申请证书,通常免费证书较少,于是须要必定费用。(笔者一直用阿里云,有个免费ssl申请,仍是挺适合我的使用的。听说其余云商也有免费ssl)面试
有关HTTP发展历史和HTTP2的详细讲解,能够点击查看这篇文章算法
有关HTTP链接中TCP握手挥手过程的详细讲解,能够点击查看这篇文章浏览器
HTTPS工做流程
client向server发送请求https://baidu.com,而后链接到server的443端口。缓存
服务端必需要有一套数字证书,能够本身制做,也能够向组织申请。区别就是本身颁发的证书须要客户端验证经过,才能够继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。安全
传送证书。这个证书其实就是公钥,只是包含了不少信息,如证书的颁发机构,过时时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。服务器
客户端解析证书。这部分工做是由客户端的TLS来完成的,首先会验证公钥是否有效,好比颁发机构,过时时间等等,若是发现异常,则会弹出一个警告框,提示证书存在问题。若是证书没有问题,那么就生成一个随即值(秘钥)。而后用证书对该随机值进行加密。微信
传送加密信息。这部分传送的是用证书加密后的秘钥,目的就是让服务端获得这个秘钥,之后客户端和服务端的通讯就能够经过这个随机值来进行加密解密了。网络
服务段加密信息。服务端用私钥解密秘钥,获得了客户端传过来的私钥,而后把内容经过该值进行对称加密。数据结构
传输加密后的信息。这部分信息是服务端用私钥加密后的信息,能够在客户端被还原。
客户端解密信息。客户端用以前生成的私钥解密服务端传过来的信息,因而获取了解密后的内容。
相关名词解释
对称加密算法(symmetric key algorithms)
在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的,所以对称加密算法要保证安全性的话,密钥要作好保密,只能让使用的人知道,不能对外公开。对称加密算法中,加密和解密都是使用同一个密钥,不区分公钥和私钥。
密钥,通常就是一个字符串或数字,在加密或者解密时传递给加密/解密算法。
非对称加密算法(asymmetric key algorithms)
在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。
注意:私钥加密后的密文,只要是公钥,均可以解密,可是反过来公钥加密后的密文,只有私钥能够解密。私钥只有一我的有,而公钥能够发给全部的人。
中间人攻击
中间人攻击(Man-in-the-MiddleAttack)是指,黑客拦截并篡改网络中的通讯数据。又分为被动MITM和主动MITM,被动MITM只窃取通讯数据而不修改,而主动MITM不但能窃取数据,还会篡改通讯数据。最多见的中间人攻击经常发生在公共wifi或者公共路由上。
图为客户端主动发送消息时:
数字证书的安全传输
为了防止中间人攻击,整个传输过程当中亟需解决的是保证客户端收到的公钥是服务端发送的,为此提出了数字证书,数字证书是由权威的CA机构给服务端进行颁发,CA机构经过服务端提供的相关信息生成证书,证书内容包含了持有人的相关信息,公钥,签署者签名信息等,最重要的是公钥在数字证书中。数字证书是如何保证公钥来自请求的服务器呢?数字证书上由持有人的相关信息,经过这点能够肯定其不是一个中间人;可是证书也是能够伪造的,如何保证证书为真呢?一个证书中含有三个部分:"证书内容(F1), 加密算法(A),加密密文(F3') ",三者的关系以下图,证书内容F1F会被散列算法SHA1计算出hash值F2,而后使用CA机构提供的私钥进行RSA加密
当客户端发起请求的时候,服务器将该数字证书发送给客户端,客户端将其中的加密密文(F3)经过CA机构提供的公钥及逆行解密后获得F2,同时将证书内容(F1)使用SHA1散列成F2,若是二者相等则说明证书没问题。
因为劫持者不知道当初加密使用的私钥是什么,因此永远没法伪造出一个正确的证书能够经过上述的验证。
HTTP的使用成本
安全性考虑:
HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么做用。
SSL证书的信用链体系并不安全,特别是在某些国家能够控制CA根证书的状况下,中间人攻击同样可行。
成本考虑:
SSL证书须要购买申请,功能越强大的证书费用越高
SSL证书一般须要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展能够部分解决这个问题,可是比较麻烦,并且要求浏览器、操做系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。
根据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增长10%到20%的耗电。
HTTPS链接缓存不如HTTP高效,流量成本高。
HTTPS链接服务器端资源占用高不少,支持访客多的网站须要投入更大的成本。
HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,相似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。
推荐阅读
长按识别
关注咱们


本文分享自微信公众号 - bigsai(bigsai)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。