HTTPS学习笔记

什么是HTTPS

  说HTTPS之前,可以先讲一下HTTP,HTTP是超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一个基于TCP协议,工作在应用层的协议,是万维网(www)的通信基础。然而HTTP并不安全,HTTP通信过程,数据全部通过明文传输,因此存在被窃听、中间人攻击(如常见的HTTP劫持)的风险。HTTPS应运而生,HTTPS是HyperText Transfer Protocol Secure(超文本传输安全协议)的缩写,在HTTP通信的基础上,添加SSL/TLS加密数据功能。

  那SSL和TLS是什么呢?SSL是Secure Sockets Layer(安全套接字),1994年网景公司推出HTTPS协议使用SSL加密。后来SSL经常多次升级以后,1999年,IETF将SSL进行标准化,推出了TLS标准。因此可以理解SSL就是TLS的前身,虽然我们现在用的都是TLS,但是由于SSL名声比较大,一般说还是TLS/SSL。

HTTPS工作原理

  HTTP因为明文传输内容导致不安全,因此SSL/TLS在HTTP基础上添加了加密逻辑。数据加密一般分为两种方式,对称加密以及非对称加密,HTTPS同时使用到了它们,我们先了解一下这两种加密方式的特性,看看HTTPS是如何使用他们的。

  对称加密:对称加密的意思是加密方和解密方使用的是同一把钥匙,常见的如AES、DES等。一般由其中一方生成,将密匙交给另外一方。

  非对称加密: 对称加密的意思是加密和解密使用的不是同一把钥匙,一般公钥可以对外公开,让发送方使用公钥进行加密,私钥由服务方单独保管不对外发布,用来进行数据解密。最常见的非对称算法如RSA。

  在互联网通信的这个场景下,对比对称加密和非对称加密两种方式是,对称加密的效率高,但是秘钥的传递是个问题,如果使用对称加密的话秘钥被黑客截获之后整个通信将不再安全,与明文传递没有区别。使用非对称加密就没有这个问题,可以让秘钥的生成方将保存好自己的秘钥,而把公钥进行公开,通过使用两对钥匙的方式,通信的双方可以各自保留一个公钥用于加密,一个私钥用与解密。但是非对称的加密的算法的过程比较复杂,因此效率不如对称加密。为了兼得对称加密的效率和非对称加密的安全,HTTPS同时使用两种方式,先使用非对称加密协商出秘钥,再通过协商出来的秘钥进行对称加密通讯。

  

 

(图1)

  如上图所示,HTTPS在TCP握手成功之后,进行正式的信息传输之前,需要先进行多次信息交互,协商出双方通信的秘钥,使用秘钥来进行对称加密通信。

①客户端发送client hello信息,包含一个客户端生成的随机数和客户端支持的加密算法等信息

②服务端发送sever hello信息,包含一个服务端生成的随机数,服务端从客户端支持的加密套件里挑选一个,并将服务端的HTTPS的CA证书发送给客户端

③④⑤客户端收到CA证书进行校验,并从证书里取出公钥,再次生成premaster随机数,并用公钥进行加密,将加密过的premaster发送给服务端。

⑥⑦服务端使用私钥将premaster解密出来,此时客户端和服务端各自拥有三个随机数,分别是1、2、3生成的三个随机数,客服端和服务端根据这三个随机数分别算出秘钥

⑧-⑪客户端使用密匙加密信息发送握手信息,服务端使用密匙解密后,同样发送秘钥加密的握手信息。

完成握手后,双方使用秘钥进行加密通讯。

 

  • 为什么需要三个随机数,client hello 和server hello都是明文,只用premaster可以吗?

  最终的对称密匙是通过client hello + server hello + premaster 三个随机数算出来的,因为TLS不相信客户端能生成完全随机的随机数,伪随机是有可能被猜测出来的,但是三个伪随机数来生成的秘钥,则几乎相当于一个完全随机的数值。一个随机数可以,N个随机数也可以,三个随机数可以理解为既不增加流程复杂度,也保证了随机数足够随机。当然最重要的premaster不可以减少,因为其他的随机数都是明文传输,只有premaster是加密处理的。

  • 怎么判断服务端的CA证书可靠,不是伪造的?

  因为CA机构颁发给网站的HTTPS证书(要钱的!一般都是花钱买的),是使用机构的私钥进行过加密签名,该私钥只有CA机构拥有(不讨论CA机构的私钥泄露这种情况),而公钥是公开在网上的,谁都可以拿到。当客户端拿到服务端返回的CA证书的时候。会从证书里获取到颁发证书的CA机构,然后获取CA机构的公钥进行解密验签。如果无法正常解密验签则该HTTPS是有问题的。然后客户端是怎么判断证书里的CA机构是合法的而不是黑客做的假机构呢。客户端可以对CA机构的证书也进行校验,检查CA的CA,CA的CA的CA,层层往上直到客户端授信的机构。一般系统在安装的时候,会在安装系统里面放置受信的CA机构,所以不要安装来路不明的操作系统,在安全上几乎等同于裸奔。

 

网络劫持

  早些年国内很多网站并不太关注网络安全的问题,很多网站没有购买HTTPS证书,只能通过HTTP访问。有的用户会遇到HTTP劫持,页面上被莫名其妙的小广告,以前也有用户反馈过一直看到其他用户页面和数据,但是不能操作,都是因为被进行了HTTP劫持。HTTP劫持逻辑大概如下图。

 

 

   正常客户端请求通过网关(可以是路由器,运营商网关等等)到达服务器,服务器返回结果再通过网关返回给客户端。

   当我们使用的HTTP协议,因为传输的整个过程中,信息全是明文,中间节点可在解析到用户HTML之后(图上红色线),往HTML里面添加一个广告节点,因此客户端打开页面之后发现自己访问的页面跟别人不一样,上面多了一个广告。在页面上添加广告应该是最常见的HTTP劫持了。曾经也遇到用户反馈过一直看到其他用户页面和数据,但是不能操作,排查原因,是因为用户使用的是小运营商网络,该运营商将某个用户的HTTP请求进行了缓存,因为不同的用户访问我的页面时候URL和参数是一样的,因此即使cookie里的用户信息并不一样,运营商还是命中缓存将缓存中的结果放回给了其他用户。

  HTTPS很好的解决HTTP劫持的问题,因为网络通信中使用密文传输,中间的网关节点无法解密,因此没有办法篡改信息。HTTPS中客户端会对服务端的CA证书进行校验,因此也能一定程度上防止DNS劫持。

posted on 2021-12-14 20:05  阿姆斯特朗回旋炮  阅读(107)  评论(0编辑  收藏  举报

导航