现在大家都上网,浏览网页,但是如果你留心的话,URL基本上都是以https://为前缀的。这意味着该URL中使用的协议是https协议。那么我们到底如何理解https 呢?在本文中,我们将尝试澄清什么可能是迄今为止最广泛的协议。
理解HTTP协议
要解释https协议,当然首先要了解http协议。 http 协议可以说是现代互联网的基础。在现代网络的OSI 7层模型中,http是典型的第7层应用层协议。也就是说,它基于网络通信的现实应用程序,例如呈现网页内容的浏览器。
下图展示了http协议的消息请求消息和响应消息的协议定义格式。
访问百度的请求分析如下:
获取https://www.baidu.com/HTTP/1.1
#请求方法URL HTTP协议版本
主机: www.baidu.com
#请求服务器地址
#以下是消息头内容
连接:保持活动
#连接方式:长连接
缓存控制: max-age=0
#请求缓存控制需要检查请求内容是否被改变
不安全的升级请求: 1
#支持https协议
User-Agent: Mozilla/5.0(Windows NT 10.0;Win64;x64) AppleWebKit/537.36(KHTML、Gecko 等) Chrome/71.0.3578.98 Safari/537.36
#请求客户端、浏览器版本
Accept: 文本/html,应用程序/xhtml+xml,应用程序/xml;q=0.9,图像/webp,图像/apng,*/*;q=0.8
#支持的响应内容类型
Accept-Encoding: gzip、deflate、br
#支持的编码类型
接受语言: zh-CN,zh;q=0.9,en;q=0.8
#支持的语言
Cookie: BAIDUID=C0A2.
#配备cookie信息
#请求消息的body不传输,body为空
响应分析:
HTTP/1.1 200 好
#协议版本消息状态码状态描述
Bdpagetype: 2
Bdqid:0x8707d7d80001f34e
#自定义消息头
缓存控制: 私有
#缓存控制策略
连接:保持活动
#长连接
Content-Type: text/html;charset=utf-8
#响应内容类型
日期: 2018 年12 月22 日星期六08:54:51 GMT
#响应时间
过期时间: 2018 年12 月22 日星期六08:54:51 GMT
#Expiration 到期日期
服务器: BWS/1.1
#服务器系统及版本
设置-Cookie: BDSVRTM=372 路径=/
设置-Cookie: BD_HOME=1;
设置-Cookie: 路径=/; 域名=.baidu.com
#设置客户端cookie
严格传输安全: max-age=172800
#严格安全传输,有效期限
X-Ua 兼容: IE=Edge, Chrome=1
#兼容的浏览器版本
内容长度: 191722
#消息体长度
#以下消息体内容
!Doctype html
html xmlns=http://www.w3.org/1999/xhtmlhead
.
有关http协议的更多信息,请参阅我之前的博文《接口测试工具Postman-基础篇》,了解http协议的基础知识。
这里请求的URL实际上是https://www.baidu.com,也就是https协议。这里为什么说是http协议呢? 两者之间是什么关系?
HTTPS协议和TLS、SSL
https协议实际上是指HyperText Transfer Protocol over Secure Socket Layer,它是基于SSL的HTTP协议。
SSL(Secure Socket Layer)是指安全套接字层。它是互联网创始人Netscape提出的一个标准协议,为网络通信提供安全和隐私保护。发展到SSL3.0版本后,标准组织IETF对SSL协议进行了标准化,并更名为TLS(Transport Layer Security)。目前已更新至TLS1.3版本。
因此,SSL和TLS实际上可以被认为是同源、在不同时间点是同一个协议。 HTTPS协议实际上是:HTTPS=HTTP + SSL/TLS
为什么需要https协议呢?http协议本身发送的信息在发送过程中本质上是透明的,所以发送过程中任何节点都无法真正读取到发送的消息体的内容。
因此,为了安全起见,传输的内容必须进行加密。 SSL/TLS 协议的作用实际上是保护这些内容。
TLS 协议的名称表明它实际上是一个具有附加安全功能的TCP 协议(传输控制协议)。
HTTPS协议基于HTTP协议,因此仍然属于应用层协议,而TLS基于TCP协议的第四层,通常被认为属于第五层,即会话层。
TLS 允许您在网络通信传输过程中对通信数据进行加密。
关于加密
因此,要了解https 协议,您现在必须了解TLS 如何加密通信数据。
对称加密
我们通常对加密的理解是,通过双方约定的规则,即通过加密算法,即使其他人知道通信的密文,也只有通信双方知道原始字符串。对于内容来说,我们无法知道原始的字符串信息。
例如,当您观看间谍电影时,传输信息时通常有一个重要的东西,称为密码本。这里的密码本实际上就是加密算法,或者说密钥。
这种加密方法称为对称加密,因为双方是平等的,使用相同的密钥来加密和解密通信。
然而,这种加密方法有一个最大的问题:密码本。在间谍电影中,特工冒着生命危险保护密码本,但如果他们不这样做,就有信息泄露的风险。
这同样适用于网络通信。这里最大的问题是如何避免密钥泄露。然而,只要密钥本身必须通过网络通信来传输,它仍然是不安全的。
该过程如下所示:
A: 请告诉我你的秘密。请不要直接听下面的话。到《红楼梦》,找到这个词,一起读。请在回复时告诉我相关词的位置。
B: 好的,《红楼梦》 已放置,请通知我。
丙:我听说了。我们立即购买《红楼梦》.
非对称加密
除了对称加密之外,还有另一种加密方法,称为非对称加密。此方法使用某种特殊的加密算法来生成两个密钥,允许您使用一个公钥和一个私钥来加密内容。只能通过另一个if来解密。并且该算法很难通过强力逆约推推导出另一个密钥。
就像古代用来调动军队的虎牌一样,只有两者完美契合才能验证真伪。
这种机制允许您将私钥保留给自己,永远不会透露给任何人,但您的公钥向全世界公布,通过网络正常传输,任何人都可以使用。这样,如果有人想向我发送加密信息,他们所要做的就是使用他们的公钥对其进行加密,并且只有你可以解密它。
所以非对称加密的大致流程是这样的:
A: 我有一个秘密想告诉你,但别人听不到……
B:等一下,我会给你你的公钥,所以请锁好并告诉我。获得公钥后,让我读取公钥上的字符,看看它们是否正确。
A:收到公钥“我是王大锤”
B: 是的,您收到的是我给您的公钥。用它来锁定
A:将公钥加密、锁定,打包并发送给B。
B:拿出私钥,打开包装,看里面的内容……
与对称加密相比,非对称加密显然更安全,但其存在计算量较大、加解密处理效率低、速度慢等缺点。通常使用多种方法的组合。
换句话说,TLS加密过程:双方首先通过非对称加密过程协商通信的对称密钥。这个对称密钥的生成是在本地完成的,密钥协商完成后,各方都获得相同的对称密钥。从此,可以基于同一个密钥进行对称加密通信。
这个对称密钥是通过非对称加密得到的,因此在双方通信过程中永远不会被传输。这平衡了安全性和效率。
签名和证书
然而,非对称加密的使用仍然存在漏洞。
服务器和客户端的通信过程实际上涉及到很多中间环节。如果存在恶意劫持者,在收到服务器信息后,就会冒充服务器,篡改信息。获取信息并发送给客户端。
这时,它实际上是冒充服务器向客户端颁发公钥,获取客户端的信息,用自己的私钥解密,用真实服务器的公钥重新加密,然后发送。到服务器。
这个风险实际上是安全领域的一个中间人攻击漏洞。
为了避免这个问题,服务器必须证明自己的身份,然后客户端也可以验证这个身份。所以它变成了签名和证书。
签名意味着服务器标识自己,获得公钥的客户端可以使用签名来确定发送者是正确的服务器。这里的签名和公钥存储在一个文件中,该文件实际上是服务器的签名证书。
为了防止中间人伪造证书,引入了权威的第三方证书颁发机构——证书颁发机构(CA)。这些权威的第三方发行机构使用私钥对服务器的签名进行加密,因此客户端可以使用该机构的公钥来验证该签名是否是其对应的服务器。如果验证正确,则可以使用证书中包含的公钥完成与服务器的后续通信协商。
HTTPS协议交互过程
有了上面的基础知识,我们再来详细了解一下访问https网站的具体通信过程。
不同版本的TLS 支持不同的密钥交换和加密算法,因此您必须在通信之前完成决定使用哪种加密算法以及使用哪种密钥生成方法的过程。由于TLS是基于TCP协议的,因此TLS握手链路建立过程发生在TCP正常的三向握手完成链路建立之后。
例如,当客户端通过浏览器访问网站时,浏览器首先向服务器发送Client Hello消息。该消息主要包括客户端支持的密码套件、TLS版本信息以及客户端的随机数。 (明文传输)当服务器收到消息时,它会返回一些内容,例如支持的密码套件、TLS 版本、自己的数字证书以及服务器生成的随机数。 (明文传输)客户端验证收到的数字证书。验证通过后,生成新的密钥(预主密钥),使用证书中包含的公钥对预主密钥进行加密,并将预主密钥发送到服务器。 (此时这是非对称加密通信。)服务器接收客户端的密文,使用其私钥对其进行解密,并获得预主密钥。 (非对称加密传输) 到目前为止,服务器和客户端都拥有三组数字:客户端随机数、服务器随机数和预主密钥。前两个随机数以明文形式发送,存在泄露风险,但预主密钥在通信过程中不发送,是计算出的安全密钥。 因此,将这三者组合起来,使用特定的先前协商的加密算法来生成密钥。该密钥称为共享秘密。即后续的会话密钥,它是后续对称加密的密钥。客户端计算出对称加密的密钥后,使用该密钥对通信内容进行对称加密,并通知服务器以后使用该密钥进行对称加密。 (对称加密通信)服务器收到密文后,使用事先计算出的密钥进行对称解密,解密成功后,使用该密钥进行对称加密通信。然后它通知客户端密钥已经过验证并且可以用于通信。 (对称加密通信)至此,整个TLS握手过程完成,可以开始对称加密通信了。
通过WireShark 捕获数据包时,过程通常如下所示:
具体交互流程参见下图(图片来源于网络)
以上是HTTPS协议通信过程的总体概述。更多测试及技术相关文章,关注成夏秋草博客或公众号(秋草说测试)。
版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。