最简单的HTTPS加密过程简介

本文详细介绍了HTTPS协议中的TLS握手过程,包括客户端和服务端的交互步骤,重点阐述了ECDHE交换算法确保安全密钥的生成。同时,解释了客户端如何通过数字签名和数字证书验证服务端证书的可靠性,确保通信安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心。

TSL可以理解为SSL (Secure Socket Layer)安全套接字层的后续版本。目前应用的最广泛的 TLS 是 1.2,而之前的协议(TLS1.1/1.0、SSLv3/v2)都已经被认为是不安全的了

TLS握手过程

由于HTTPS的实质是在TLS握手后建立的安全通道上进行的HTTP请求,因此本文只介绍TLS握手过程的几个关键步骤:

1.客户端向服务端发起请求,将一个随机数、自己的TLS版本号、Cipher Suite加密算法列表(告知服务器自己支持哪些加密算法)等发给服务端。

2.服务端将自己的证书、一个随机数、TLS版本、从Cipher Suite加密算法列表中选择使用的加密算法等发给客户端。

3.服务端继续将交换算法(ECDHE)公钥发送给客户端,一般只在服务端选择使用DHE 和DH_anon等加密算法组合时才会由服务器发出。

4.客户端验证证书(验证过程后文介绍),如果验证通过后,客户端将自己的交换算法(ECDHE)公钥发给服务端,一般只在服务端选择使用DHE 和DH_anon等加密算法组合时才会由服务器发出。

5.客户端随后用两个随机数+服务端交换算法(ECDHE)公钥配合自己的交换算法(ECDHE)私钥生成一个加密密钥key1,并且用key1加密一条消息发给服务端。

6.服务端收到消息后用两个随机数+客户端交换算法(ECDHE)公钥配合自己的交换算法(ECDHE)私钥生成一个加密密钥key2,并且用key2加密一条消息发给客户端,由于交换算法(ECDHE)可以保证key2等于key1,所以双方就有了一样的对称加密key进行加解密是,而且key1和key2并没有进行传输,所以第三方无法获取。

注意:以上步骤3、4是服务端在选择了DHE 和DH_anon等加密算法组合时才有,如果选择了其他非对称加密算法,则直接跳到5,并且在步骤5、6中的没有key1和key2,而是如下:

5.客户端生成一个key,然后用证书里得到的服务端公钥加密这个key,然后发给服务端,接着用这个key加密一条消息发给服务端。

6.服务端用自己的私钥解密得到key,并且用key加密一条消息发给客户端。

7.至此,TLS握手完成,后续HTTP请求的内容都用key1和key2(或者key)进行加密通信。

如果使用固定的公私钥算法有一定的安全风险,如:私钥泄露,因此交换算法(ECDHE)是一种更安全的加密方式。

如图所示基于交换算法(ECDHE)的TLS握手过程

客户端如何验证证书的可靠性?

 数字签名和数字证书

数字签名:

数字签名就是用HASH算法将一段内容生成固定长度的hash值,相同的内容一定生成相同的hash值,然后用CA私钥将hash值h1加密得到数字签名,所以数字签名就是用来保证内容没有被篡改的。

数字证书:

数字证书就是某个权威机构颁发的包含了有效期、服务端公钥信息和它加密算法、颁发者、用CA私钥加密的证书的数字签名等信息的证书。

一般权威机构的证书都会内置在系统或者浏览器里,浏览器在收到服务端的证书后,根据证书颁发者信息就去找内置的证书,找到后用内置证书的CA公钥解密数字证书得到证书hash值h1,然后用内置证书对应的hash算法对收到的证书内容进行hash计算,得到hash值h2,如果h1等于h2就证明收到的证书安全可靠。

这里注意内置证书的CA公钥和证书里的服务端公钥的区别,内置CA公钥用来解密数字签名,服务端公钥用来协商私钥。

参考资料:

HTTP与HTTPS的区别,详细介绍_张花生的博客-CSDN博客_http和https的区别

HTTPS协议、TLS协议、证书认证过程解析 - snowater - 博客园

### HTTPS 加密过程中使用的具体加密算法 HTTPS 是一种基于 HTTP 的安全通信协议,它通过 SSL/TLS 协议实现数据的安全传输。在 HTTPS 中,通常会结合使用多种加密技术以确保数据的机密性和完整性。 #### 1. **非对称加密算法** 非对称加密算法主要用于建立安全连接时的身份验证以及交换对称加密所需的密钥。常见的非对称加密算法包括 RSA、DSA 和 ECC 等[^1]。其中,RSA 是最常用的非对称加密算法之一,在 HTTPS 握手阶段用于加密对称加密算法的密钥[^3]。 #### 2. **对称加密算法** 对于实际的数据传输,HTTPS 更倾向于使用对称加密算法,因为其加解密速度远高于非对称加密算法。AES(Advanced Encryption Standard)是对称加密中最常用的一种算法,广泛应用于 HTTPS 数据流的加密处理中[^2]。由于 AES 的高效性能和强大的安全性,它成为 TLS/SSL 协议中的主要对称加密标准。 #### 3. **混合加密机制** 在 HTTPS 实现中,采用了一种混合加密的方式: - 初始握手阶段利用非对称加密(如 RSA 或 ECC),完成服务器身份认证并协商出一个共享的秘密密钥。 - 后续的实际数据传输则切换到高效的对称加密模式(如 AES)。这种方式既兼顾了非对称加密带来的高安全性,又解决了其效率低下的问题。 以下是简化版的 HTTPS 运行流程示意图: ```plaintext 客户端请求 -> 服务器响应证书 (含公钥) -> 双方通过非对称加密生成共享密钥 -> 后续数据均用对称加密 (如 AES) 处理 ``` --- ### 示例代码:模拟简单的 HTTPS 密钥交换过程 以下是一个伪代码示例,展示如何在 HTTPS 中应用 RSA 和 AES 结合的工作原理: ```python import rsa from Crypto.Cipher import AES # 假设这是由服务器生成的一对 RSA 密钥 (public_key, private_key) = rsa.newkeys(512) # 客户端随机生成一个 AES 密钥 aes_key = b'Sixteen byte key' # 使用服务器的公钥加密 AES 密钥 encrypted_aes_key = rsa.encrypt(aes_key, public_key) # 服务器接收到加密后的 AES 密钥,并用自己的私钥解密 decrypted_aes_key = rsa.decrypt(encrypted_aes_key, private_key) # 接下来可以使用 AES 密钥进行对称加密 cipher = AES.new(decrypted_aes_key, AES.MODE_EAX) data = b'Hello Secure World' ciphertext, tag = cipher.encrypt_and_digest(data) print("Encrypted Data:", ciphertext) ``` 此代码片段展示了如何先用 RSA 加密 AES 密钥,再用该密钥执行快速的对称加密操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值