一张图就把HTTPS工作原理讲明白了
HTTPS(Hypertext Transfer Protocol Secure)是HTTP(Hypertext Transfer Protocol)的扩展版。它利用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对数据进行加密,确保数据在客户端和服务器之间传输的过程中不被窃取或篡改。
HTTPS的主要目的是确保数据在客户端(如浏览器)和服务器之间传输时的机密性、完整性和真实性。这种保护机制极大地提高了数据传输的安全性,防止了信息被窃取和篡改。HTTPS常用于需要保护敏感信息的场景,如网上银行、电子商务网站、电子邮件服务和社交媒体平台等。
HTTP vs HTTPS
HTTP(HyperText Transfer Protocol)和HTTPS(HyperText Transfer Protocol Secure)都是用于在客户端(如浏览器)和服务器之间传输数据的协议。它们的主要区别在于HTTPS在HTTP的基础上增加了SSL/TLS协议,从而提供了数据加密和身份验证功能。
-
HTTP:HTTP是一种无状态的、明文的通信协议,这意味着数据在传输过程中不进行加密。尽管HTTP可以有效地传输网页内容,但由于数据以明文形式传输,容易被截取和篡改。
-
HTTPS:HTTPS通过引入SSL/TLS协议,为数据传输提供加密和身份验证功能。SSL/TLS协议确保数据在传输过程中不会被窃听或篡改,并通过数字证书验证服务器的身份。HTTPS在浏览器地址栏中通常显示一个锁形图标,表明连接是安全的。
SSL/TLS概述
SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是为互联网通信提供安全保障的加密协议。TLS是SSL的升级版本,具有更高的安全性和性能。
SSL/TLS的主要功能:
- 加密:使用对称加密算法和非对称加密算法对数据进行加密,确保数据在传输过程中保持机密性。
- 身份验证:通过数字证书验证服务器和客户端的身份,防止中间人攻击。
- 数据完整性:使用消息验证码(MAC)和散列函数确保数据在传输过程中没有被篡改。
公钥和私钥
公钥和私钥是实现加密和解密的核心。它们构成了一对密钥,其中公钥用于加密数据,私钥用于解密数据。
- 公钥(Public Key):公钥是公开的,可以分发给任何人。它用于加密数据或验证数字签名。
- 私钥(Private Key):私钥是保密的,只能由拥有者自己使用。它用于解密数据或生成数字签名。
在HTTPS通信中,服务器会将公钥包含在数字证书中发送给客户端,客户端使用公钥加密数据,服务器使用私钥解密数据。这种机制确保了即使数据被截获,也无法解密。
数字证书
数字证书是由可信的证书颁发机构(CA,Certificate Authority)签发的,用于验证服务器身份的电子文件。
数字证书包含以下主要信息:
- 服务器的公钥:用于加密数据和验证服务器的身份。
- 服务器信息:包括服务器的域名和公司名称等信息。
- 证书颁发机构信息:包括CA的名称和数字签名。
- 有效期:证书的生效日期和过期日期。
数字证书的工作原理
- 生成密钥对:服务器生成一对密钥,即公钥和私钥。
- 申请证书:服务器将公钥和相关信息提交给CA,申请数字证书。
- 颁发证书:CA验证服务器的身份后,使用CA的私钥对服务器的公钥和相关信息进行签名,生成数字证书。
- 安装证书:服务器安装CA签发的数字证书,并将其发送给客户端。
- 验证证书:客户端收到证书后,使用CA的公钥验证证书的有效性和完整性。
数字证书确保了客户端与服务器之间的通信是安全的,并且服务器的身份是可信的。
HTTPS通信流程
HTTPS通信过程涉及客户端(通常是浏览器)和服务器之间的多个交互步骤,通过这些步骤建立一个安全的通信通道。
1、客户端发起请求
- 用户在浏览器中输入一个HTTPS URL(如https://www.example.com)。
- 浏览器向服务器发起一个HTTPS连接请求。
2、服务器响应并发送证书
服务器收到请求后,将其数字证书发送给客户端。数字证书包含服务器的公钥和由可信的证书颁发机构(CA)签名的信息。
3、客户端验证证书
客户端收到服务器的证书后,会进行以下验证步骤:
- 验证证书的完整性和签名:使用CA的公钥验证证书的签名,确保证书没有被篡改。
- 检查证书的有效期:确认证书在有效期内。
- 验证证书的颁发机构:确认CA是受信任的机构。
- 检查证书吊销状态:通过证书吊销列表(CRL)或在线证书状态协议(OCSP)检查证书是否被吊销。
4、生成会话密钥
- 如果证书验证通过,客户端会生成一个随机的对称密钥(也称为会话密钥),用于加密会话中的数据。
- 客户端使用服务器的公钥加密这个会话密钥,并发送给服务器。
5、服务器解密会话密钥
- 服务器使用其私钥解密会话密钥。
- 此时,客户端和服务器都持有相同的对称密钥,用于加密和解密后续通信中的数据。
6、加密数据传输
- 客户端和服务器使用生成的会话密钥对传输的数据进行加密和解密。
- 所有传输的数据(如HTTP请求和响应)都通过加密通道进行,确保数据在传输过程中保持机密性和完整性。
SSL/TLS握手过程
SSL/TLS握手过程是HTTPS通信的核心,确保客户端和服务器之间建立一个安全的通信通道。
1、客户端Hello
在SSL/TLS握手的第一步,客户端向服务器发送一个ClientHello消息。这个消息包含了客户端支持的加密套件(cipher suites)、SSL/TLS版本、压缩方法以及一个随机数。具体内容如下:
- SSL/TLS版本:客户端支持的最高版本(如TLS 1.2或TLS 1.3)。
- 加密套件列表:客户端支持的加密算法组合(如AES、RSA等)。
- 压缩方法:客户端支持的数据压缩方法。
- 随机数:客户端生成的随机数,用于生成会话密钥。
- 扩展字段:包括服务器名称指示(SNI)、会话恢复信息等。
2、服务器Hello
服务器收到ClientHello消息后,发送一个ServerHello消息。这个消息包含了服务器选择的加密套件、SSL/TLS版本、压缩方法以及一个随机数。具体内容如下:
- SSL/TLS版本:服务器选择的SSL/TLS版本。
- 加密套件:服务器选择的加密算法组合。
- 压缩方法:服务器选择的数据压缩方法。
- 随机数:服务器生成的随机数,用于生成会话密钥。
- 扩展字段:包括服务器名称指示(SNI)、会话恢复信息等。
3、服务器证书和密钥交换
服务器向客户端发送其数字证书,证书中包含了服务器的公钥和由证书颁发机构(CA)签名的信息。客户端使用CA的公钥验证证书的真实性,确保服务器的身份是可信的。
在某些加密套件中,服务器还需要发送ServerKeyExchange消息,包含用于密钥交换的参数。例如,使用Diffie-Hellman密钥交换时,服务器会发送其Diffie-Hellman参数。
服务器发送ServerHelloDone消息,表示服务器Hello阶段完成。客户端收到该消息后,进入下一个阶段。
4、客户端密钥交换
客户端生成一个随机的会话密钥(对称密钥),并使用服务器的公钥对其进行加密。加密后的会话密钥通过ClientKeyExchange消息发送给服务器。服务器使用其私钥解密这个会话密钥。
5、会话密钥生成
客户端和服务器使用各自生成的随机数和共享的会话密钥材料,生成最终的会话密钥。这个会话密钥用于加密和解密后续通信中的数据。
6、握手完成
- 客户端Finished消息:客户端发送Finished消息,包含所有握手消息的摘要,用会话密钥加密。这确保了握手过程中没有被篡改。
- 服务器Finished消息:服务器也发送Finished消息,包含所有握手消息的摘要,用会话密钥加密。至此,握手完成,安全通道建立。
在握手完成后,客户端和服务器使用生成的会话密钥进行数据加密和解密。所有HTTP请求和响应都通过加密通道进行,确保数据在传输过程中保持机密性和完整性。
SSL/TLS版本
TLS 1.0
TLS 1.0是SSL 3.0的继承者,解决了一些安全问题,但仍然存在许多漏洞,因此已经逐步淘汰。
TLS 1.1
TLS 1.1引入了对CBC(Cipher Block Chaining)模式的改进,解决了多次填充攻击问题。但由于安全性不够强,仍然被TLS 1.2和TLS 1.3取代。
TLS 1.2
TLS 1.2是目前广泛使用的版本,具有以下特性:
- 支持SHA-256哈希算法:提高了数据完整性验证的安全性。
- 支持GCM(Galois/Counter Mode):一种更安全的加密模式。
- 增强的握手协议:提供更强的身份验证和密钥交换。
TLS 1.3
TLS 1.3是最新的版本,进一步提高了安全性和性能:
- 减少握手步骤:简化握手过程,降低延迟。
- 移除不安全的加密算法:如RC4和CBC模式,确保更高的安全性。
- 前向安全性:通过Ephemeral Diffie-Hellman密钥交换,确保密钥泄露后,过去的通信仍然安全。
加密和解密
对称加密
对称加密使用相同的密钥进行数据的加密和解密。它具有速度快、效率高的特点,因此适合用于大量数据的传输。在HTTPS中,对称加密用于实际的数据传输。常见的对称加密算法包括AES、DES和3DES。
-
AES(Advanced Encryption Standard)
- 加密过程:使用一个对称密钥对明文进行加密,生成密文。
- 解密过程:使用相同的对称密钥对密文进行解密,还原出明文。
- 密钥长度:AES支持128位、192位和256位密钥长度,密钥长度越长,安全性越高。
-
3DES(Triple Data Encryption Standard)
- 加密过程:对数据进行三次DES加密,每次使用不同的密钥。
- 解密过程:对数据进行三次DES解密,还原出明文。
- 密钥长度:3DES使用三个56位的密钥,总共168位。
非对称加密
非对称加密使用一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。非对称加密的安全性高,但加密和解密速度较慢,通常用于加密对称密钥而非实际数据传输。
-
RSA(Rivest-Shamir-Adleman)
- 公钥加密:客户端生成会话密钥后,使用服务器的公钥对会话密钥进行加密,并发送给服务器。
- 私钥解密:服务器使用其私钥解密会话密钥,确保只有服务器能够读取会话密钥。
- 密钥长度:RSA的密钥长度通常为2048位或以上,长度越长,安全性越高。
-
ECC(Elliptic Curve Cryptography)
- 公钥加密:使用椭圆曲线数学算法生成公钥和私钥,进行加密和解密。
- 私钥解密:相比于RSA,ECC提供更高的安全性和效率,适合资源受限的设备。
会话密钥
会话密钥是用于对称加密的临时密钥,仅在当前会话中有效。会话密钥通过非对称加密进行安全传输,一旦会话结束,密钥就会失效。这样既保证了数据传输的安全性,又提高了加密解密的效率。