文章目录
- 01 | 工作原理
- 02 | SSL/TLS协议
- 2.1 | 握手协议
- 2.2 | 更换密码协议(Change Cipher Spec Protocol)
- 2.3 | 警告协议(Alert Protocol)
- 2.4 | 应用数据协议(Application Data Protocol)
- 03 | 加密算法
- 3.1 | 对称加密算法
- 3.2 | 非对称加密算法
- 04 | 总结
HTTPS是一种基于TLS/SSL协议的安全传输协议,用于保障网络通信过程中的机密性、完整性、身份认证和不可否认性。
在HTTP通信中,数据包裹在报文中明文传输,安全性较低。而HTTPS使用了TLS/SSL协议对通信过程进行加密和认证,从而提高通信的安全性。
HTTPS是一种安全的网络传输协议,可以确保通信过程中的数据安全和可信。它广泛应用于电子商务、网上银行等需要保密性的场景,成为了互联网上的重要保障手段。
01 | 工作原理
HTTPS的工作原理涉及到握手协议、数字证书验证、加密解密等多个方面,下面先了解一下HTTPS的工作原理
当客户端和服务器建立HTTPS连接时,会执行以下流程:
当客户端(如浏览器)和服务器之间建立HTTPS连接时,会在传输层(Transport Layer)之上创建一个安全通道,该通道包括以下四个基本步骤:
-
客户端发起SSL/TLS连接请求:客户端向服务器发起连接请求,告诉服务器想要建立一个SSL/TLS加密通道;
-
服务器响应SSL/TLS连接请求:服务器收到客户端的请求后,回复自己的身份信息和公钥等证书。客户端验证服务器的身份,若验证通过则接受服务器提供的公钥;
-
客户端向服务器发送加密数据:客户端使用服务器提供的公钥对需要传输的数据进行加密,并将加密后的数据传输给服务器;
-
服务器解密并响应客户端请求:服务器使用自己的私钥对客户端发送的加密数据进行解密,并对客户端的请求做出相应的响应;
02 | SSL/TLS协议
TLS/SSL协议(Transport Layer Security/Secure Socket Layer)是实现HTTPS加密通信的核心技术,需要深入学习TLS/SSL协议中包括握手协议、证书验证等在内的各个部分,掌握其基本原理和实现方法。
SSL/TLS协议主要包括以下几个部分:
-
握手协议:客户端和服务器之间通过通信的方式协商加密算法、确定对称密钥等;
-
更改密码协议:客户端和服务器之间通过通信的方式确认切换到加密传输模式;
-
警告协议:用于在发生协议运行错误时通知对方;
-
应用数据协议:基于已经协商完成加密设置的通道上进行的应用数据传输
其中,握手协议是SSL/TLS协议中最重要的部分之一。在握手协议中,客户端和服务器首先会协商加密算法,包括非对称加密算法和对称加密算法,并确定使用哪些算法进行加密传输。接下来,客户端和服务器会采用非对称加密算法来交换密钥,并由双方生成会话密钥用于对称加密算法的加解密操作
2.1 | 握手协议
SSL握手协议分为四个部分:客户端hello、服务器hello、证书和密钥协商。流程如下:
-
客户端hello:客户端向服务器发出请求,并发送包括支持的加密算法、随机数生成器以及其他信息的“hello”消息。
-
服务器hello:服务器向客户端回复,并发送包括支持的加密算法、随机数生成器以及其他信息的“hello”消息。
-
证书验证:服务器返回它的数字证书,这个数字证书通常是由一个受信任的第三方数字证书颁发机构(CA)签发的。客户端使用预装的根证书或中间证书验证证书的合法性,确保连接到的是真实的服务器。证书验证通过后,客户端可以获取服务器的公钥。
-
密钥协商:客户端使用服务器公钥加密一个随机值,称之为会话密钥,用于加密通信。服务器使用自己的私钥解密该随机值,获得客户端会话密钥。
2.2 | 更换密码协议(Change Cipher Spec Protocol)
用于确保在通信过程中任何恶意用户不能破译密码并窃取另一方使用密钥加密的后续数据。更换密码协议主要包括以下步骤:
-
客户端向服务器发送更换服务端加密密码规范记录。
-
服务器确认收到更改密码规范记录,并发送更改客户端加密密码规范记录。
-
客户端确认收到更改密码规范记录。
当上述操作完成之后,客户端和服务器即使用新的加密规范来加密和传输数据,从而确保了通信过程中数据的安全性和完整性。
更改密码协议并不是一个独立的协议,而是作为SSL/TLS协议的一个子协议在握手协议中进行的。更改密码协议可以确保任何已经拦截通信的第三方无法破解密码,并使用旧有的秘密密钥来进行解密等操作。
需要注意的是,更改密码协议并不影响对称加密算法的选取和会话密钥的生成,只是在通信过程中更新了对称加密算法所使用的密钥。更改密码协议的重要性在于能够确保SSL/TLS协议在通信过程中及时调整加密模式和密钥,从而提升通信过程的安全性和可靠性
2.3 | 警告协议(Alert Protocol)
用于在通信过程中传输各种警告信息,以提醒双方注意可能存在的安全问题或者协议运行错误等情况。警告协议主要包括以下两种类型的警告信息:
-
警告级别(Alert Level):警告级别分为致命警告和警告两种类型。致命警告用于提示严重的安全问题(例如证书验证失败),这种警告可能导致通信终止。而警告则表示一些非严重问题(例如扩展情况下的未知功能码)。
-
警告描述(Alert Description):对于每一种警告级别,SSL/TLS协议规定了一组警告描述信息,包括如下内容:
-
消息认证码(MAC)故障
-
解密故障
-
认证失败
-
等等
-
在使用SSL/TLS协议进行通信时,任何一个参与方都可能向另一方发送警告信息,以更好地保证数据的安全性和完整性。例如,在客户端和服务器之间建立SSL/TLS连接的过程中,如果服务器收到的客户端请求中包含有错误的证书或者无法验证的数字签名等问题,就可以通过警告协议向客户端发送相应的警告信息,以便客户端能够及时做出相应的响应和处理。
2.4 | 应用数据协议(Application Data Protocol)
是在握手协议和警告协议之后的最后一步协议。应用数据协议主要用于实际传输数据,包括SSL/TLS连接的加密数据和未加密数据。
在SSL/TLS协议中,应用数据协议使用对称加密算法来对数据进行加密,输入的密钥是通过握手协议中的密钥交换协议生成的。对称加密算法可以提供高效的加密和解密速度,并且对于大多数应用场景来说,其安全性已经足够强大。而且,应用数据协议可以支持多种加密算法,如AES、DES、3DES等等,以满足不同安全需求。
因为应用数据协议是建立在握手协议和警告协议上的,所以在应用数据协议传输数据之前,需要确保握手协议已经正确执行,并且确保密钥协商完成。如果密钥协商过程出现问题,比如证书验证失败,将导致无法建立SSL/TLS连接,从而无法使用应用数据协议传输数据。
另外,应用数据协议还能够支持压缩数据,以便更有效地传输。同时,在传输数据时,SSL/TLS协议还支持分段传输,以及并发处理数据(即同时传输多条数据)等高级功能。这些功能能够进一步增强SSL/TLS协议的安全性和效率,适用于通信过程中各种应用场景。
03 | 加密算法
HTTPS使用了多种加密算法来保证数据传输的安全性,如对称加密算法、非对称加密算法、哈希算法等,需要熟悉这些加密算法的基本原理和使用方法。
数字证书是一种电子文件,其中包含与网站相关的证书信息,例如网站的名称、公钥等。数字证书可以由权威机构颁发,用于识别和验证网站的身份。当客户端连接到一个HTTPS网站时,服务器会返回其数字证书给客户端,以此来证明自己身份的真实性。客户端会使用预装的根证书或中间证书验证证书的合法性,确保连接到的是真实的服务器。
3.1 | 对称加密算法
是一种使用同样的密钥来进行加密和解密的加密算法,也被称为共享秘密加密。在对称加密算法中,发送方使用密钥对明文进行加密得到密文,接收方收到密文后再使用同样的密钥对密文进行解密得到明文。
对称加密算法具有速度快、效率高和安全性平衡(因为如果坏人拿到这份共同的密钥,安全性就几乎荡然无存了)等特点,因此广泛应用于网络通信、数据传输、文件加密等领域。常见的对称加密算法有AES、DES、3DES等。
在对称加密算法中,密钥是关键。密钥长度越长,破解难度越大,但也会相应地带来更高的加解密成本。同时,密钥的管理和分配也是一个重要的问题,需要确保密钥的安全性,不能被恶意攻击者获取。
对于对称加密算法,还有一个重要的问题就是密钥交换。在通信双方建立连接之前,需要协商出一个共享的密钥并确保密钥的安全性。在对称密钥交换中,有以下两种常见的方法:
-
预共享密钥:预共享密钥是指在通信双方建立连接之前,通过其他渠道将密钥交给对方。这种方法相对安全,但密钥分配较为繁琐。
-
密钥交换协议:密钥交换协议是一种在通信双方建立连接过程中协商密钥的方法,常见的密钥交换协议有Diffie-Hellman、RSA等。
总之,对称加密算法是一种高效、快速、安全的加密算法,在各种应用领域都得到了广泛的应用。通过选择合适的密钥长度和密钥交换方法,可以保证通信数据的机密性和安全性。
3.2 | 非对称加密算法
也称为公钥加密算法,是一种使用不同的密钥来进行加密和解密的加密算法。在非对称加密算法中,每个参与者都有一对密钥:公钥和私钥。公钥可以公开,而私钥必须保密。发送方用接收方的公钥对明文进行加密得到密文,接收方用自己的私钥对密文进行解密得到明文。
非对称加密算法具有密钥管理与分发和验证身份等优点,广泛应用于数字签名、密钥交换协议、数字证书等领域。常见的非对称加密算法有RSA、DSA、ECC等。
在非对称加密算法中,公钥可以公开,但私钥必须保密;因此,在数学上设计一个安全的非对称加密算法是非常困难的。虽然公钥加密能够有效地达到“加密速度慢、加密强度高”的效果,但它的加密复杂度是对称加密算法的成千上万倍,不适用于大规模数据的加密。
在非对称加密算法中,还有一个重要的问题就是密钥交换。在通信双方建立连接之前,需要通过一些方法将公钥传输给对方。常见的方法有通过密钥交换协议(如Diffie-Hellman)虽然不公开私钥,但可以让通信双方共同协商出一个对称密钥,从而避免中间人攻击。
总之,非对称加密算法是一种安全、可靠、实用的加密算法。它具有密钥管理与分发和身份验证等优点,但也存在着加密速度慢、加解密效率低、密钥交换等缺陷。需要按照实际需求合理选择加密算法与密钥长度,并结合对称加密算法等加密技术,从而达到更好的保护通信安全的效果。
04 | 总结
总结一下,HTTPS具体的步骤如下:
-
客户端向服务器请求SSL连接,此时客户端发送一个“Client Hello”消息,其中包括了:
-
支持的SSL或TLS协议版本号
-
生成的随机数
-
支持的加密算法列表
-
-
服务器收到“Client Hello”消息后,向客户端发送一个“Server Hello”消息,其中包括了:
-
确认协议版本号
-
生成的随机数
-
选择的加密算法
同时,服务器还会向客户端发送其公钥和证书。
-
-
客户端对服务器返回的证书进行验证,包括以下步骤:
-
检查证书是否过期
-
检查证书是否在可信的证书颁发机构(CA)列表中
-
验证证书中的数字签名是否正确
如果证书验证通过,则客户端使用服务器发送的公钥来加密一个随机值,并将其发送给服务器。
-
-
服务器使用自己的私钥来解密客户端发送的随机值,并使用该随机值生成对称密钥。服务器将该密钥发送给客户端,并且从此以后使用该密钥来加密所有的数据。
-
客户端收到服务器发送的密钥后,会根据之前协商过的加密算法生成一个“Finished”消息,并使用对称密钥来加密该消息,然后发送给服务器。
-
服务器接收到来自客户端的“Finished”消息后,也会根据之前协商过的加密算法生成一个“Finished”消息,并使用对称密钥来加密该消息,然后发送给客户端。
-
安全通道建立完成后,双方可以开始进行加密通信了,客户端和服务器使用对称密钥来加密所有的数据,从而保证传输的安全性。