今天我们要聊一聊HTTPS——一种保护我们在线通信安全的协议。或许你已经注意到,许多网站都在其URL中使用了“https://”,而不是传统的“http://”。这个“s”代表的是“安全”,意味着所有通过这些网站传输的数据都被加密,从而保护它们不被未授权的第三方窃取。
HTTPS是现代网络安全的一个标准,尤其在处理敏感数据时。与HTTP相比,HTTPS提供了加密传输和身份验证,这意味着它可以保护我们的数据免受中间人攻击,确保我们正在与真正的服务器通信,而不是被欺骗的假网站。
在接下来的内容中,我们将会深度了解HTTPS它如何工作,为什么它是网络安全的重要组成部分。
在深入HTTPS之前,相信小伙伴们已经了解了HTTP(超文本传输协议)。HTTP是一种用于传输超文本(如网页)的协议。它基于请求-响应模式,客户端(通常是浏览器)向服务器发送请求,然后服务器回应请求,发送回网页的内容。如果对HTTP还不太了解的小伙伴可以自行查阅HTTP相关基础知识。
但是,HTTP有一个大问题——它是不安全的。在HTTP中,数据以明文形式传输,这意味着任何在客户端和服务器之间的节点都可以查看或修改这些数据。
为了解决这个问题,HTTPS(安全超文本传输协议)应运而生。HTTPS实际上是HTTP的一个扩展,它通过将TLS(传输层安全性)或SSL(安全套接层)协议整合到HTTP中,来提供数据加密、服务器认证和数据完整性保护。
80
端口,而HTTPS使用443
端口。在HTTPS中,加密是保护数据的关键。这里涉及两种类型的加密方法:对称加密和非对称加密。
加密(公钥)
,另一个用于解密(私钥)
。非对称加密更安全,但速度较慢。HTTPS巧妙地结合了这两种方法:使用非对称加密
进行初始的密钥交换
,然后转而使用对称加密
进行数据传输
,平衡了安全性和性能。
TLS(传输层安全性)和SSL(安全套接层)是加密协议,用于在网络中的两个端点之间建立加密连接。它们保证了在客户端和服务器之间传输的数据的机密性和完整性。
什么是SSL和TLS?
简而言之,SSL和TLS都是用于保护网络通信的协议,但TLS是更加现代、安全的版本,已成为互联网上标准的安全技术。
SSL/TLS握手是是客户端和服务器之间建立安全连接之前发生,类似于TCP握手,TCP
握手是建立网络连接的基础,而SSL/TLS
握手是在这种连接的基础上增加安全层,简单来说SSL/TLS握手实现以下过程:
- 密钥交换:首先,客户端和服务器交换密钥信息。客户端发送它支持的加密方法的列表,服务器从中选择一个共同的加密方法,并发送回它的证书,其中包含了服务器的公钥。
- 证书认证:客户端验证服务器的证书是否由可信的证书颁发机构(CA)签发,以及证书是否有效。
- 加密数据传输:一旦密钥交换和证书验证成功,客户端和服务器之间的所有通信都将被加密。
下面来详细说一下SSL/TLS握手过程。
大家熟知HTTP协议的“三次握手”过程,也就是TCP连接的标准方法。而在HTTPS中,SSL/TLS“握手”过程更为复杂,这个过程通常涉及至少九个主要的网络包交换:
客户端Hello:客户端发送一个握手开始的信号,包括支持的TLS版本、加密方法和一个客户端生成的随机数。
服务器Hello:服务器响应客户端,选择一个共同的TLS版本和加密方法,并发送一个服务器生成的随机数。
服务器证书:服务器向客户端发送其数字证书,这是验证服务器身份的关键步骤。
服务器Hello完成:这个包标志着服务器已经发送了所有必要的握手信息。
客户端密钥交换:客户端生成一个预主密钥,并将其加密后发送给服务器。
客户端更改密码规范:客户端通知服务器,它将开始使用新的加密参数来加密消息。
客户端握手完成:这个加密消息表明客户端端的握手过程已完成。
服务器更改密码规范:服务器通知客户端,它将开始使用新的加密参数来加密消息。
服务器握手完成:这个加密消息表明服务器端的握手过程已完成。
加上HTTP使用TCP交换的3个包,使用HTTPS协议进行通信时,客户端和服务器建立连接总共需要交换12个包,如下图所示:
数字证书是一种电子文档,用来证明网络实体的身份,类似于网络世界的身份证。它包含了实体的公钥以及由CA
签发的签名。
证书颁发机构(CA)是一个可信赖的第三方机构,负责颁发和管理数字证书。CA的作用是验证实体的身份,然后用CA的私钥对证书进行签名。这样,任何人都可以使用CA的公钥来验证证书的真实性。
我们把证书原本的内容生成一份“签名”,比对证书内容和签名是否一致就能判别是否被篡改。这就是数字证书的“防伪技术”,这里的“签名”就叫数字签名:
这部分内容建议看下图并结合后面的文字理解,图中左侧是数字签名的制作过程,右侧是验证过程:
创建哈希值:首先,使用哈希函数(如SHA-256)对原始数据(如文档、软件、消息)生成一个唯一的哈希值。哈希值是一种固定长度的字符串,即使原始数据只发生了微小的变化,哈希值也会大幅改变。
加密哈希值:然后,发送者使用自己的私钥对这个哈希值进行加密。加密后的哈希值就是数字签名。
附加数字签名:数字签名被附加到原始数据上,一起发送给接收者。
提取和解密:接收者收到数据后,使用发送者的公钥对数字签名进行解密,恢复出哈希值。
重新计算哈希值:接收者对收到的原始数据使用相同的哈希函数重新计算哈希值。
比较哈希值:接收者比较解密得到的哈希值和重新计算的哈希值。如果两个哈希值相同,则证明数据未被篡改且确实是由拥有相应私钥的发送者发送的。
通过这个过程,数字签名不仅确保了数据的完整性,也提供了发送者身份的认证。这在HTTPS协议中尤其重要,因为它帮助确保网站的身份并保护数据不被篡改。
当浏览器连接到一个HTTPS网站时,它会检查该网站的证书是否有效。这包括检查证书是否由已知的、可信赖的CA签发,证书是否针对正确的网站,以及证书是否过期。如果这些检查通过,浏览器会显示一个锁形图标,表示与该网站的连接是安全的。
① 证书验证阶段:
1)浏览器发起 HTTPS 请求;
2) 服务端返回 HTTPS CA证书(含公钥);
3)客户端验证证书是否合法,如果不合法则提示告警。
② 数据传输阶段:
1)当证书验证合法后,在本地生成随机数(随机数相当于对称加密密钥);
2)通过公钥加密随机数,并把加密后的随机数传输到服务端;
3)服务端通过私钥对随机数进行解密;
4)服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输,而客户端收到加密后的数据会用随机数进行解密(随机数相当于对称加密密钥)。
通过本文的学习,我们对HTTPS有了更深入的了解。从基本概念到深入的技术细节,希望能够对大家有所帮助!