HTTPS在信息传输时使用的混合加密机制,其中包括了共享密钥加密和公开密钥加密,我们先来介绍一下这两种加密方式。
共享密钥加密(对称密钥)
对称加密是指加密和解密使用的是同一个密钥。就像家里的门锁,钥匙只有一把,开门和锁门都靠它。
工作原理是使用密钥将传输信息加密后,传输时必须将密钥也发给对方,对方用获取到的密钥将获取到的信息进行解密从而得到信息。
如果通信被监听,那么密钥就可会落入攻击者之手,也就失去了加密的意义。
使用共享密钥进行加密和解密,速度快、效率高,但密钥分发存在安全问题。
公开密钥加密(非对称密钥)
公开密钥加密是使用一对密钥:公钥和私钥,一个加密,一个解密。
公钥和私钥的区别(用于非对称加密):
项目 | 公钥(Public Key) | 私钥(Private Key) |
---|---|---|
用途 | 加密数据、验证签名 | 解密数据、创建签名 |
公开程度 | 可以公开给任何人 | 必须保密,仅自己保留 |
功能示例 | 别人用它加密发给你的数据 | 你用它解密别人发来的数据 |
加密/解密方向 | 公钥加密 → 私钥解密 | 私钥加密(签名) → 公钥验证 |
举个例子理解:
假设你是小明,有一对密钥:
-
公钥:你告诉所有人(比如朋友、公司)
-
私钥:你自己保管,不能泄露
-
加密通信: 朋友用你的公钥加密信息 → 只有你用私钥能解密
-
数字签名: 你用私钥签名文件 → 别人用你的公钥验证这个签名是否是你签的
发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
公钥加密的数据只能用私钥解密,私钥加密(签名)的数据只能用公钥解密。
公开密钥加密解决了密钥分发问题,但计算开销大,速度较慢。
HTTPS采用的混合加密方式
由于两种加密方式都有各自的缺点(共享密钥安全性低,公开密钥效率低),所以HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。
在交换密钥环节使用安全的公开密钥加密方式,之后的建立通信交换报文阶段则使用高效的共享密钥加密方式。
HTTPS 的混合加密机制(简化流程):
-
客户端发起请求
-
浏览器访问一个 HTTPS 网站,向服务器发送“你好”请求(Client Hello)。
-
-
服务器返回证书(包含公钥)
-
服务器发送包含它的公钥的数字证书(通常是由权威 CA 签发)。
-
-
客户端验证证书
-
浏览器会验证这个证书是否可信(比如是不是被 CA 签名过的,是否过期)。
-
-
生成对称密钥(共享密钥)
-
客户端随机生成一个对称密钥。
-
然后用服务器的公钥加密这个密钥,并发送给服务器。(保证了在传输时哪怕报文被截获,报文中的密钥信息也无法被解密)
-
-
服务器用私钥解密
-
服务器收到加密的密钥后,用自己的私钥解密,得到了客户端生成的对称密钥。
-
-
之后的数据传输:使用对称加密
-
双方现在都有这个共享密钥,用它对数据进行加密和解密,通信效率高,内容也安全。
-