认识 HTTPS 协议

63 阅读5分钟

理解 HTTPS

众所周知,HTTP 协议的传输是不安全的。主要有三个方面,第一是明文传输;第二是无法确定传输数据的完整性;第三是无法确定接收方的身份准确性。归纳下来,HTTP 协议存在窃听风险、篡改风险和冒充风险。

而 HTTPS 是一种安全的通信协议,用于在计算机网络上进行加密和身份验证的数据传输。它是基于传统的 HTTP 协议,通过使用 SSL 或其继任者 TLS 协议来加密通信内容。HTTPS 具备加密通信、校验机制和数字证书三个特性,从而保证了数据传输的安全性。

HTTP 和 HTTPS 两者使用的端口不一样,HTTP 默认端口是 80,HTTPS 默认端口是 443。

HTTPS 的特性

加密通信

HTTPS 使用非对称密钥和对称密钥加密相结合的方式来实现数据的加密。客户端和服务器之间的通信会进行握手过程,协商出一个临时的对称密钥,用于加密和解密传输的数据。这样可以确保通信内容在传输过程中是加密的,只有具有正确密钥的接收方能够解密数据。如下图所示:

HTTP 协议.jpg

  • 在建立通信前使用非对称密钥的方式来交换会话的对称密钥,后续就不再使用非对称密钥加密了;
  • 之后的通信过程使用对称密钥对通信内容进行加密。

通过 HTTPS 协议对通信内容进行加密,有效解决了 HTTP 协议的窃听风险。

校验机制

虽然 HTTPS 协议可以对通信内容进行加密,但万一加密的内容被篡改了怎么办?

为了解决这个风险,HTTPS 协议会对传输内容进行校验,采用的是摘要算法和数字签名的方式。

摘要算法是一种单向函数,将输入数据转换为固定长度的哈希值,并且无法通过哈希值反推出内容。HTTPS使用摘要算法用于生成消息摘要或哈希值,以确保数据的完整性和防止篡改。常用的摘要算法有:

  • MD5
  • SHA-1
  • SHA-256
  • SHA-3

仅仅只有摘要算法是无法满足校验的,因为无法保证摘要算法产生的哈希值不会被中间人替换。因此还需要对哈希值进行数字签名。

数字签名是使用私钥对数据的摘要进行加密生成的,然后可以使用相应的公钥进行解密和验证。如下图所示:

HTTP 协议-第 2 页.jpg

数字证书

虽然 HTTPS 通过数字签名对哈希值进行加密,保证了哈希值的不可篡改和冒充,但是如果数字签名是伪造的,则经过数字签名加密的哈希值自然也是不可靠的。因此,HTTPS 协议会对数字签名的证书进行验证。

数字证书是一种用于加密通信和验证服务器身份的安全证书。它通过证书颁发机构(Certificate Authority,CA)对服务器身份进行认证,并包含了服务器的公钥,用于建立安全的 HTTPS 连接。数字证书的验证流程如下图所示:

2c060e8d-4961-4c49-8f1d-2280d0b59a6f.png

HTTPS 建立安全连接

HTTPS 协议是在传统的 HTTP 协议建立连接后,SSL/TLS 会发生通信,进行密钥交换,建立安全连接。常用的密钥交换算法有 RSA 和 ECDHE,不同的算法握手过程不一样。

下面,我们基于 RSA 算法来了解 SSL/TLS 安全连接的过程:

cd8cde0b-d910-4ec4-b0be-2847b389cecb.png

  • 客户端向服务器发起加密通信请求,会向服务器发送以下信息:
    • 客户端支持的 TLS 协议版本
    • 客户端产生的随机数,后面用于生成会话密钥的条件之一
    • 客户端支持的密码套件列表,如 RSA 加密算法
  • 服务端收到客户端请求后,向客户端发出响应,响应内容如下:
    • 确定 TLS 协议版本,客户端不支持则关闭通信
    • 服务端产生的随机数,后面用于生产会话密钥的条件之一
    • 确认密码套件列表
    • 服务器的数字证书
  • 客户端收到服务器的回应后,首先通过系统或浏览器中的 CA 公钥,验证证书的真实性,证书没问题会从证书中取出服务器的公钥,并使用它加密报文,向服务器发送以下消息:
    • 一个随机数(pre-master key),该随机数会被服务器公钥加密
    • 加密通信算法改变通知,随后所有信息都用会话密钥通信
    • 客户端握手结束通知,表示客户端握手阶段结束,同时把之前的所有内容的数据做个摘要,用来给服务端验证。
  • 服务端收到客户端第三个随机数之后,通过协商的加密算法,计算出本次通信的会话密钥
    • 加密通信算法改变通知,后续用会话密钥通信
    • 服务端握手结束,同时把之前的内容做个摘要,用来供客户端校验

客户端验证证书的流程也不复杂,如下图所示:

  • CA 签发证书过程,如左边:

    • 首先会把公钥、用途、颁发者、有效时间等信息打包,对这些信息做 hash 计算,得到 hash 值
    • CA 用自己的私钥对 hash 值加密,生成签名
    • 将签名和原信息添加在文件证书上,形成数字证书
  • 客户端校验服务端数字证书过程,如右边

    • 客户端会用同样的 hash 算法计算出该证书信息的 hash 值
    • 客户端通过 CA 公钥,解码签名内容得到 hash 值
    • 比较两个 hash 值,相等则表示整数可信

总结

本文先是介绍了 HTTPS 协议和 HTTP 的不同之处,理解了 HTTPS 协议存在的必要性。然后对 HTTPS 协议的特性进行分析,主要是加密通信、校验机制和数字证书。最后,我们也了解 HTTPS 协议建立安全通信的过程和原理。

创作不易,喜欢的话请点赞收藏转载,您的支持是我更新的最大动力!!!