浅谈HTTPS传输过程

HTTPS是什么

  HTTPS不是一个新的协议,可以理解为是一个HTTP协议的加密"版本"(HTTP+SSL(TLS))。那为什么HTTP协议需要加密,不加密会出现什么问题呢?先来了解下传统的加密方式

加密方式

  

  对称加密:对称加密是Server和Client都拿一个相同的密钥进行加密和解密,他的优点的性能好一点,但是也存在很多问题。

  问题

    1、服务器如何把密钥安全的给到客户端(存在请求被拦截、窜改)

    2、假设一个客户端的密钥泄露了被公开,所有的客户端以及服务器的连接传输都是不安全的

    

  非对称加密:非对称加密将密钥拆分为公钥、私钥,两个秘钥,私钥存在服务器不能让任何人知道,公钥则可以随意发布给任何客户端。采用此加密方式,发送方将报文用公钥加密后,接受方收到密文(加密后的报文)采用私钥进行解密拿到报文,这种方式发送方就不用获取私有就可以进行加密传输避免了密钥泄露。虽然解决了对称加密密钥传输泄露问题,但是非对称加密的性能肯定要比对称加密的方式性能低很多。其实也会存在一些安全隐患:

  问题

    1、客户端无法证明公钥的来源的真实性(假设在服务端将公钥分发给客户端的过程中被攻击者拦截,并换成其他的公钥或者密钥。或者是收到了非目标服务器的公钥,两者之间的数据传输将被阻断)

    2、客户端和服务端开始通讯时,MITM将客户端请求拦截掉,将自己的公钥发送给客户端(客户端以为是服务端返回的),伪造一个请求发送给服务端(服务端以为是客户端发起的),拿到服务端的公钥。那之后客户端发送的数据,MITM可以用自己的私钥解开,服务器返回的密文,MITM同样也可以用公钥解开。两端的交互MITM都知道的一清二楚,并且客户端和服务器也不会发现任何异常。当然此问题就算是HTTPS方式,过程中少了"内置公钥"同样也会发生,大家可以看完HTTPS传输过程后思考下。

HTTPS传输过程

  HTTPS综合了两种加密方式的优点,在密钥交换时才用非对称加密来保证安全性(当然这个安全性还是要和CA认证机构挂钩,单纯的非对称加密肯定还是有问题的),在建立完桥梁时就采用对称加密的方式进行request和response。

       

  • 以上有两对公私钥,一把是CA机构的公钥和私钥,一把是服务器的公钥和私钥。
  • 数字签名由数字证书的明文内容组成然后通过CA机构私钥进行加密后的密文(只有CA机构的公钥可以打开)。
  • 步骤2内置公钥的存在就是为了防止公钥在网络之中传输容易泄露的问题,浏览器或者操作系统在安装时默认就会植入一些世界公认的可信任CA机构的证书(可以理解里面包含公钥)或者是用户自主导入的根证书(比如支付宝等金融机构会提示用户安装根证书的原因)。
  • 较为关键的步骤是数字签名验证阶段,再拿到服务器给到的数字证书后,用内置的CA证书的公钥去解密数字签名,解密后拿到证书的明文内容,然后和服务器发送的数字证书的明文内容做比较(数字签名=证书上的明文内容被私有加密后),如果发现不匹配,那证明证书可能被篡改过,则就会拒绝链接。
  • 当然验证阶段还有一些细节的验证操作,比如:服务器返回的证书浏览器是否信任,如果不信任,交给用户去选择是否继续。明文验证等等。最关键的验证还是数字签名验证阶段
  • 步骤4客户端根据服务器的算法生成一组随机数(当做对称加密的密钥),然后用之前拿到的数字证书上(服务器返回的)的公钥进行加密。
  • 步骤4.1和4.2用私钥解密就拿到了与客户端之间沟通的密钥(对称加密),之后的步骤4.3.2的请求报文和响应报文都采用这个密钥进行加密 

HTTPS也可能带来的安全问题

  非对称加密问题2留了一个疑惑,不知道大家看完有没有想到,“内置公钥”是系统或浏览器直接默认内置的,这些内置的CA机构,上面也提到了“世界公认”比较出名的,如果想在这些出名的机构申请证书对与一些普通的网站来说需要花费昂贵的成本,而且有效期还较短,带一个通配符*的一个域名,一年就要5000块。那么随着一些中小型网站的增多,也会有一些个人认证机构。不过一些网站因买不起合法的证书因此会自己制造一个根证书用于加密传输,这些当然就是不受信任的证书。访问这种网站时,服务端就会发来一个根证书,让用户选择是否信任。

  那么这种操作就给MITM带来了可乘之机,假设MITM造假一个根证书,如果用户信任了这个根证书。

       

  • 步骤3.3.1.1.2.2.2拿到了对称密钥这次的连接就基本完蛋了,他随之可以解密之后的传输的报文。MITM让客户端和服务器互相都感觉不到异常。
  • 最重要的是跳过了数字签名阶段,MITM让客户端验证了他自己申请的根证书,并把客户端发出去的请求拦截后伪造后发给服务器,神不知鬼不觉的就攻击成功了。
  • 假设客户端没有信任此证书,则数字签名验证这个阶段就会失败了。

小结

  看完这个问题,是不是觉得以后什么证书信息都不敢了信任了,其实也不是非得这样说,假设你经常浏览某某个人网站,而且你很了解这个网站,那不必担心。假设涉及到网银、在线支付,或是一些知名的网站,这种公司性质的网站一定会申请合法的根证书,一旦发现根证书不受信任,果断终止。不过一般的网民用户也不会经常浏览那些个人网站或者小型网站,如果遇到要信任根证书时,就果断拒绝掉吧。

原文地址:https://www.cnblogs.com/yangtianle/p/11202574.html