HTTPS安全通讯原理解析

对于敏感数据我们通常会选择用HTTPS进行加密传输。HTTPS和HTTP有什么关系?它是如何实现数据安全传输的?现在就带你研究。

一、HTTPS是什么?

1.1 HTTPS

HTTPS的全称是“HTTP over TLS”,也叫“HTTP Secure”,早期也叫做“HTTP over SSL”。表示“在安全层之上的HTTP协议”。它是在HTTP之下增加一个安全层,用于保障HTTP的加密传输。在HTTP将数据交给传输层之前先交给TLS进行加密,然后再交给下面的层级进行分块、传输。对面传输层收到消息之后,先把数据交给TLS进行解密,然后再上交给HTTP。

因此,HTTPS本身并不是一种协议,也没有版本号的概念。它是HTTP协议和TLS协议的结合。

1.2 TLS

全称是“Transport Layer Security”,它的前身是SSL(Secure Socket Layer)。早期网景公司(NetScape)出于安全考虑开发了HTTPS,底层用SSL支持。后来SSL不仅用于HTTPS,也用于其他的应用层协议的加密传输,如FTP、SMTP等。后来发展中,该技术被NetScape分享出来,并成为业界标准。维护者也从NetScape变成IETF,并改名为TLS。

TLS实现加密通讯的本质:是在客户端和服务器之间用非对称加密方式协商出一套对称密钥,并用它进行数据的加密传输。

二、HTTPS数据传输流程

HTTPS进行加密通讯的大致流程主要是:客户端请求建立TLS连接;服务器发回证书;客户端验证服务器证书;客户端信任服务器后,和服务器协商对称加密密钥;使用对称密钥进行通讯;

接下来将详细解读一下这个过程。

1、客户端发送“Client Hello”

客户端发起建立连接请求,发送“Client Hello”(“Client Hello”是一个单字节数据,名称叫做“Client Hello”),以及可选的TLS版本集合、可选的加密套件、客户端随机数到服务端。

TLS现行的有TLS1.0、TLS1.1、TLS1.2、TLS1.3四个版本,客户端需要把自己能够支持的版本告知服务器,由服务器选择一个进行使用。如果都不支持,则加密通讯建立失败。

加密套件,指的是对称加密算法、非对称加密算法以及Hash算法这三个内容。客户端同样需要和服务器商定具体使用哪一个加密套件。关于加密套件里的加密算法和Hash算法,可以看一下之前关于“签名与认证”的章节。

2、服务端发送“Server Hello”

服务器向客户端发送单字节数据“Server Hello”。同时将选定的TLS版本、加密套件、以及服务器随机数发给客户端。

到这里两端同时约定好了加密所需要的算法工具。

3、服务器发送“服务器证书”

约定好算法后,服务器需要将自己的公钥发给客户端。用于进行非对称加密通讯。这里的公钥就是服务器证书。网络是非常危险不可信的。因此需要对证书的合法性进行验证。就是证明这个证书是服务器发给我的。

服务器发送的证书,需要同时发送证书签发机构的公钥和证书签名。就是通过该证书签发机构证明,该服务器证书是合法的。

这个过程是递归的,证书签发机构的证书,又需要签发机构的签发机构进行证明。递归的终点是“根证书”。它是内置在客户端系统里,被我们认为是无条件信任的证书。通过递归的验证,最终能被“根证书”所证明,则说明该服务器证书是合法的。

根证书只能证明证书的合法的,不能证明数据的来源。为避免攻击中用合法的证书进行攻击,服务器同时将主机名和地址一起签名发松给客户端。

简单来说,根证书证明证书签发机构的合法性,证书签发机构证明服务器证书的合法性。关于签名的原理,看下前面“签名与认证”的章节。

4、客户端生成和发送客户端随机数“Pre-master secret”

客户端再次生成随机数“Pre-master secret”,并使用服务器公钥加密后,发送给服务器。双方结合之前的“客户端随机数”和“服务端随机数”,以及“Pre-master secret”,算出一个”Master secret”数据。再用这个数据生成对称加密的密钥。

我们注意到之前的“客户端随机数”和“服务端随机数”都是未加密传输,有泄漏的风险,因此要结合“Pre-master secret”一起生成。

使用”Master secret”最终会生成四个数据,分别是:“客户端加密密钥”、“服务端加密密钥”、“客户端MAC secret”、“服务端MAC secret”。

客户端和服务端分别使用不同的加密密钥,是为了防止“消息回退攻击”。攻击者拿到数据后,虽然看不懂,但可以原封不动的发回给发送者。如果通讯双发使用相同密钥,发送者收到消息后解密可能获得错误信息。因此,双方使用不同的对称密钥。

MAC secret,其实是“MHAC secret”, MHAC的全称是“hash-based message authenticate code”,带有密钥的hash算法。

5、客户端发送“将使用加密通讯”

对称加密工具准备好之后,客户端向服务器发送“将使用加密通讯”,告知服务器接下来的数据是对称加密后的数据。

6、客户端发送”Finished”

客户端向服务器发送“Finished”消息,这个消息是将前面1~5消息结合起来,加密并Hash后发给服务端。服务器收到消息后,对消息进行验证。

7、服务端发送“将使用加密通讯”

服务器向客户端发送“将使用加密通讯”,告知客户端接下来的数据是对称加密后的数据。

8、服务端发送“Finished”

服务器向客户端发送“Finished”消息,这个消息是将前面1~7消息结合起来,加密并Hash后发给客户端。客户端收到消息后,对消息进行验证。

到这里客户端和服务器就可以进行正常的加密通讯。以上就是完整的HTTPS建立连接和进行加密通讯的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值