HTTPS 加密原理
HTTPS 是什么?
HTTPS也是⼀个应⽤层协议,是在 HTTP 协议的基础上引⼊了⼀个加密层。
为什么要加密?
背景:因为在企业之间使用 HTTP 进行传输数据,而 HTTP 是明文传输,很容易被 心怀不轨的人 在客户端与服务器之间入侵路由器、交换机,获取到用户和企业的隐私数据。所以加密工作就随之而来。
臭名昭著的 "运营商劫持"
大家在多年之前使用浏览器下载一些软件的时候,是否发生过,本来点了下载链接,但是最后下载下载下来的软件和想要的并不一样。
这里举一个例子:“天天动听”
我们所期望的下载是如下的
但是你的下载请求被运营商劫持后所得到的是
可以看到二者之间下载的“网址”变了,下载的名称也变了。这就是“运营商劫持”。
这就像你妈拿50块钱给你,叫你去买瓶酱油,假设超市售价15元,结果买回来后,你和你妈说涨价了变成18元,3块钱就被你劫持了。
加密是什么?
加密就是把不希望泄露的东西保护起来不让别人看到,在这里也就是把 HTTP 的明文传输的内容变成别人看不懂的内容。
HTTPS 的加密
引入对称加密
对称加密就是引入一个加密的密钥,用这个密钥对数据进行加密,也用于解密。但是由于不能所有的客户端都是用同样的密钥,就很容易造成密钥泄露,所以每个客户端都要使用不同的密钥,但是密钥又要通过网络传输,同样造成密钥泄露。这也就造成单一的对称密钥不能保证安全性。
引入非对称加密(公钥-私钥)
公钥和私钥是配对的,最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多。
公钥:可以让任何人知道的密钥,用于对数据的加密。
私钥:不能公开,只能自己知道,用于对数据的解密。
通过公钥对明⽂加密,变成密⽂,通过私钥对密⽂解密,变成明文。也可反过来。
客户端在发送请求的时候通过公钥进行加密,而服务端有私钥进行解密,理想情况下如图:
但是在实际上,在这中间也可以动手脚,“黑客”可以自己生成一个密钥发送给服务器。然后通过自己的密钥对服务器的相应进行解密,得到客户端与服务端的通信对称加密的密钥。
引入证书
中间人攻击(MITM)的基本原理
攻击方式:
-
攻击者(如恶意 WiFi、ISP)拦截客户端与服务器的通信。
-
伪造一个假的服务器证书,让客户端误以为它是合法服务器。
-
解密并篡改流量(如窃取密码、注入广告)。
示例:
-
用户访问
https://bank.com
,但攻击者伪造bank.com
的证书,让浏览器误以为连接是安全的。
数字证书如何防止 MITM?
1. 证书的组成
数字证书包含:
-
服务器公钥(用于加密
Pre-Master Secret
)。 -
域名(Subject Alternative Name, SAN)(如
bank.com
)。 -
颁发机构(CA)的签名(证明证书是合法的)。
-
有效期(防止长期滥用)。
2. 证书验证流程
当客户端(浏览器)收到服务器证书时,会进行以下检查:
(1) 证书链验证(Chain of Trust)
-
证书由 受信任的 CA(如 DigiCert、Let's Encrypt)签发。
-
浏览器内置了 受信任的根 CA 列表,通过逐级验证证书链:
根 CA → 中间 CA → 服务器证书
-
如果证书不是由受信 CA 签发,浏览器会警告(如 "此证书不受信任")。
(2) 域名匹配
-
检查证书中的 Subject 或 SAN 是否与访问的域名一致。
-
如果域名不匹配(如证书是
fake.com
,但访问bank.com
),浏览器会阻止连接。
(3) 有效期检查
-
证书必须在有效期内(如
2023-01-01 至 2024-01-01
)。 -
如果证书过期,浏览器会警告。
(4) 吊销状态检查(CRL/OCSP)
-
检查证书是否被 CA 吊销(如私钥泄露时)。
-
CRL(证书吊销列表):CA 定期发布的已吊销证书列表。
-
OCSP(在线证书状态协议):实时查询证书状态。
-
-
如果证书被吊销,浏览器会阻止连接。
3. 为什么攻击者无法伪造合法证书?
-
攻击者无法获取 CA 的私钥:
-
CA 的根证书私钥严格保密,攻击者无法伪造签名。
-
-
攻击者无法通过域名验证(DV/OV/EV):
-
CA 在颁发证书前会验证申请者对域名的控制权(如 DNS 解析、文件验证)。
-
-
浏览器强制检查:
-
如果证书未通过验证(如自签名证书、未知 CA),浏览器会显示警告。
-
4. 攻击者可能的绕过方式(及防御)
攻击方式 | 原理 | 防御措施 |
---|---|---|
自签名证书 | 攻击者生成自己的证书 | 浏览器警告 "不受信任的连接" |
CA 私钥泄露 | 如 2011 年 DigiNotar 事件 | CA 吊销受影响证书,浏览器更新黑名单 |
用户手动信任恶意证书 | 如企业监控设备要求安装根证书 | 用户需警惕非官方证书安装 |
DNS 劫持 + 伪造证书 | 结合 DNS 欺骗攻击 | 使用 DNSSEC 或 DoH/DoT(加密 DNS) |
完整 HTTPS 防 MITM 流程
-
客户端访问
https://example.com
:-
服务器返回证书(含公钥 + CA 签名)。
-
-
浏览器验证证书:
-
检查 CA 是否受信、域名是否匹配、是否过期、是否吊销。
-
-
密钥交换:
-
客户端用服务器公钥加密
Pre-Master Secret
,确保只有真实服务器能解密。
-
-
加密通信:
-
使用对称加密(如 AES)传输数据,中间人无法解密。
-
有了这几道过程之后,我们在网上的通信就变得更加安全,隐私也被保护的比较安全,一般情况下的“黑客”就无法直接获取到私密数据。有的人就会说 “那直接入侵服务器不就行了。” 要是有能力入侵服务器,还不如直接到数据库盗走数据,入侵的一般动机就是“金钱”,有这本事的人也不会冒着这么大的风险挣钱,因为也不缺。本篇文章到此结束。