全面梳理HTTPS ,值得你看

HTTPS为什么会出现

由于HTTP是明文传输,在传输的过程中,任何人都可能从中截获、修改或者伪造数据;其次是不会验证通信双方身份的;最后,通信双方是不会验证报文的完整性的。为了解决这些问题HTTPS就诞生了。

什么是HTPPS

HTTPS完善了HTTP协议,弥补了HTTP协议的缺陷。它不是新的协议,只是HTTP的通信接口被SSL或者TLS协议替代了。使用SSLTLS来进行通信加密。可以说HTTPS是身披SSL外壳的HTTP。

在这里插入图片描述

HTTPS做了什么?

  • 加密: 对传输的数据进行加密,防止被窃听。
  • 数据一致性: 用户发送的数据会被完整的传输到服务器上,不会被篡改。
  • 身份认证: 确认对方身份。

HTTPS端口号443,HTTPS如何做到安全性的,关键在于SSSL/TLS。

什么是SSL/TLS

  • HTTP协议使用SSL协议之后,就具有加密认证数据准确性的功能。任何应用层的协议(比如SMTP电子邮件协议、TeInet远程登录协议等)都可以使用SSL协议进行加密。而TLS是以SSL为原型的一种协议
  • SSL(安全套接层),属于OSI七层模型中的第5层(会话层)。SSL在1999年被更名为TLS(传输安全层)。直到现在,TLS共出现三个版本: 1.1、1.2、1.3。目前使用最广泛的是1.2.
  • TLS用于通信应用程序之间提供保密性、数据完整性。 TLS由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议 等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。

对称加密

在了解对称加密前,先了解密码学 的东西:

  • 明文 : 一般认为明文是有意义的字符或者比特集,或者是通过某种公开编码就能获得的消息。
  • 密文:对明文进行某种加密后就变成了了密文
  • 加密:把原始的信息(明文)转换为密文的过程
  • 解密:把已经加密的信息恢复为明文的过程。

对称加密:指加密和解密使用同一个密钥的方式。只要保证了密钥的安全性,那么整个通信过程也就具有安全性了。
在这里插入图片描述
对称加密的算法:

比如DES3DESChaCha20等。目前常用的AES-128AES-192AES-256ChaCha20

在这里插入图片描述
总结一下对称加密:

加密方使用密钥将原始数据加密,然后将密钥交给解密方解密。这样如果密钥被盗取,任何人都可以解密。

非对称加密

非对称加密有有个密钥:一个公钥一个私钥,一般公钥用来加密,私钥解密。公钥任何人都可以使用,而私钥只有自己使用,是不会传给任何人的。使用公钥加密的密文,只能使用私钥来解密。

在这里插入图片描述
非对称加密解决了对称加密的问题:就算公钥被黑客拿到,但是它没有私钥,也就无法解开密文。

非对称加密的算法:

比如:DH、DSA、RSA、ECC

在这里插入图片描述

混合加密

TLS使用的对称加密非对称加密 的混合加密方式来实现通信的安全性。

AES的加密(对称加密)比较快,而RSA/ECDHE的加密(非对称加密)的速度比较慢。所以TSL就结合了这两种加密方式。

过程大概是这样的(RSA加密):

  • 客户端向服务器发送一个client_random随机数和加密方法
  • 服务器收到之后,返回一个server_random、加密方法、自己的公钥
  • 客户端接收,接着生成另一个随机数pre_random,使用公钥加密后传给服务器
  • 服务器用公钥解密这个被加密后的pre_random

现在浏览器和服务器有三样相同的凭证:client_random、server_random和pre_random。然后两者用相同的加密方法混合这三个随机数,生成最终的对称密钥。

ps: 下面会详细讲解,这里只需知道还是会受到中间人攻击。

尽管这样还是会受到中间人攻击。

中间人攻击

如果黑客采用DNS劫持,将目标地址转换为黑客服务器的地址,然后黑客自己造一份公钥和私钥。所有的请求都发给中间人,中间人再以客户端的请求内容向正规的服务器发请求,这样所有的请求与响应,都会经过中间人。正式因为客户端不会验证公钥是不是来自自己请求的网站。

在这里插入图片描述
这就是中间人攻击,所以上面的混合加密方式还不可靠,我们还要验证server发来的公钥是不是来自自己请求的server。(认证)

摘要算法

在解决上面认证问题 前,先解决数据完整性问题,如何保证数据的完整性?

在TLS中,实现完整性的手段主要是摘要算法。比如MD5SHA-1等,TLS推荐使用SHA-2(SHA-224/256/384/512)

所谓摘要算法,可以理解为:把任意长度的数据压缩为一种固定长度的字符串,就要好像给数据加了把锁。 生成的字符串称为摘要。并且这种加密算法不可逆,即没有任何一种密钥可以解开。
在这里插入图片描述
这样就解决了数据完整性问题。下面再来看看解决身份认证问题

身份认证

如何证明server的身份,就要给server颁发一个身份证,谁来颁发? CA机构来颁发
全球的CA机构就几家,CA机构可以为server颁发一个数字证书

CA机构也有自己的私钥和公钥,不一样的是CA机构使用私钥加密,公钥解密。

  • server将的原文,公钥传给CA
  • CA使用摘要算法(SHA-2)将原文生成摘要。使用自己私钥加密这个摘要 —— 生成数字签名。并将数字签名、证书持有者、公钥等信息组成数字证书发给server。
  • server 将原文和数字证书发给client。
  • client拿到证书后,使用内置的对应的CA公钥进行解密,获取摘要,并使用相同的摘要算法(SHA-2)对传来的原文进行加密,生成另外一份摘要,比对两份摘要是否相同,相同则身份验证通过。使用这个公钥加密生成的对称密钥X给server,以后都用这个密钥X来通信.

在这里插入图片描述

传统的RSA版本握手过程

意思是非对称加密使用的是RSA加密算法。其实上面已经说了一遍,只是不一样是:

当服务器传送server_random、加密方法的时候,顺便会带上数字证书(包含了公钥), 接着浏览器接收之后就会开始验证数字证书。如果验证通过,那么后面的过程照常进行,否则拒绝执行。

梳理一下整个过程:
在这里插入图片描述

TLS 1.2 握手过程

TLS 1.2的握手过程,这里介绍的是非对称加密算法是ECDHE。看不传统的RSA版本有何不同。

  • 1、客户端发加密请求

    传递:一个client_random随机数、所支持TLS版本、所支持的加密套件列表。

    • 随机数:用于后面生成对称密钥

    • 密码套件列表:什么是加密套件列表?举个例子:

      比如: TLS_ECDHE_WITH_AES_128_GCM_SHA256

      意思是:在TLS握手过程中,使用ECDHE算法生成pre_rendom(后面会讲),使用128位的AES算法进行对称加密,在对称加密中使用主流的GCM分组模式,最后使用的摘要算法是SHA256

  • 2、服务器响应

    传递:一个server_random随机数、一个server_params参数、确认TLS版本、确认加密套件列表、自己的证书。 (server_params下面会讲)

  • 3、客户端验证证书,生成对称密钥

    客户端验证证书,验证通过后,传递client_params参数给服务器(这个client_params会倍服务端放入公钥加密)。

    接着客户端通过ECDHE算法计算出pre_random(基于client_params和server_params)

    再接着,客户端将这三个随机数client_random、server_random、pre_random,通过一个伪随机函数计算最终的对称密钥

  • 4、服务端生成对称密钥

    服务端收到客户端的client_params参数后,也使用ECDHE算法通过ECDHE算法计算出pre_random(基于client_params和server_params)

    再将三个随机数client_random、server_random、pre_random通过一个伪随机函数计算最终的对称密钥

在这里插入图片描述
RSA和ECDHE的区别:

  • ECDHE,是在主流的TLS1.2中,使用的非对称加密的加解密的算法,没有用到RSA。
  • ECDHE还有一个特点:就是客户端发送完收尾消息后,可以提前抢跑,直接发HTTP报文,节省一个RTT,不必等收尾消息到达服务器,然后等服务器返回收尾消息。

TSL 1.3做了哪些改进?

在2018年就推出了 TLS1.3,对于TLS1.2做了一系列的改进,主要分为这几个部分:强化安全、提高性能

强化安全

TLS1.3废除了非常多的加密算法,最后保留了5个加密套件

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_AES_128_GCM_SHA256
  • TLS_AES_128_GCM_8_SHA256

可以看到,对称加密算法只有:AES和ChaCha20; 分组模式也只剩:GCM和POLY1305; 摘要算法只剩:SHA-256和SHA-384了。

注意: ECDHE非对称密钥的加密算法彻底取代了RSA加密算法。原因是:RSA被发现了漏洞,一旦服务器私钥被获取,之前所有的对称密钥都会获取,所有被加密的报文都会被破译。而ECDHE算法在每一次握手时,生成的是不同的pre_random,进而每一次握手的对称密钥也不同,即使私钥被破解,也不影响历史消息。这种一次破译不影响历史信息的性质也叫前向安全性RSA不具备前向安全性,而ECDHE具备,所有在TLS 1.3中RSA被彻底取代。

提升性能

握手改进:
在这里插入图片描述

  • 在第一次握手时,客户端就会发送:client_params参数,服务端不必等对方验证证书后,才拿到client_params,
  • 其他大体与TLS1.2都差不多,少一个RTT时间,所以TLS1.3握手方式也叫 1-RTT握手

来张图:
在这里插入图片描述

最后在脑海中回想一下主流的加密算法:

  • 对称加密算法: AES 、ChaCha20
  • 非对称加密算法: ECDHE 、RSA
  • 摘要算法: SHA

参考文章:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章