快速了解Https

HTTPS简介

HTTPS:https是http与ssl的结合,为了解决http明文传输导致信息泄露的问题。ssl通过公钥和私钥保证客户端和服务器之间的通讯加密,由权威机构办法的数字证书杜绝了中间人攻击的可能。默认端口为443。

SSL需要到ca申请证书,一般免费证书较少,因而需要一定费用。(笔者一直用阿里云,有个免费ssl申请,还是挺适合个人使用的。据说其他云商也有免费ssl)

有关HTTP发展历史和HTTP2的详细讲解,可以点击查看这篇文章

有关HTTP连接中TCP握手挥手过程的详细讲解,可以点击查看这篇文章

HTTPS工作流程

  1. client向server发送请求https://baidu.com,然后连接到server的443端口。
  2. 服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。
  3. 传送证书。这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
  4. 客户端解析证书。这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(秘钥)。然后用证书对该随机值进行加密。
  5. 传送加密信息。这部分传送的是用证书加密后的秘钥,目的就是让服务端得到这个秘钥,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
  6. 服务段加密信息。服务端用私钥解密秘钥,得到了客户端传过来的私钥,然后把内容通过该值进行对称加密。
  7. 传输加密后的信息。这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。
  8. 客户端解密信息。客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容。

相关名词解释

对称加密算法(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根证书的情况下,中间人攻击一样可行。

成本考虑:

  1. SSL证书需要购买申请,功能越强大的证书费用越高
  2. SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。
  3. 根据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。
  4. HTTPS连接缓存不如HTTP高效,流量成本高。
  5. HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。
  6. HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。

原文发布于微信公众号 - 全菜工程师小辉(mseddl)

原文发表时间:2019-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券