HTTPS 加密原理

HTTPS 是什么?

HTTPS也是⼀个应⽤层协议,是在 HTTP 协议的基础上引⼊了⼀个加密层。

为什么要加密?

背景:因为在企业之间使用 HTTP 进行传输数据,而 HTTP 是明文传输,很容易被 心怀不轨的人 在客户端与服务器之间入侵路由器、交换机,获取到用户和企业的隐私数据。所以加密工作就随之而来。

臭名昭著的 "运营商劫持"

大家在多年之前使用浏览器下载一些软件的时候,是否发生过,本来点了下载链接,但是最后下载下载下来的软件和想要的并不一样。

这里举一个例子:"天天动听"

我们所期望的下载是如下的

但是你的下载请求被运营商劫持后所得到的是

可以看到二者之间下载的"网址"变了,下载的名称也变了。这就是"运营商劫持"。

这就像你妈拿50块钱给你,叫你去买瓶酱油,假设超市售价15元,结果买回来后,你和你妈说涨价了变成18元,3块钱就被你劫持了。

加密是什么?

加密就是把不希望泄露的东西保护起来不让别人看到,在这里也就是把 HTTP 的明文传输的内容变成别人看不懂的内容。

HTTPS 的加密

引入对称加密

对称加密就是引入一个加密的密钥,用这个密钥对数据进行加密,也用于解密。但是由于不能所有的客户端都是用同样的密钥,就很容易造成密钥泄露,所以每个客户端都要使用不同的密钥,但是密钥又要通过网络传输,同样造成密钥泄露。这也就造成单一的对称密钥不能保证安全性。

引入非对称加密(公钥-私钥)

公钥和私钥是配对的,最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多。

公钥:可以让任何人知道的密钥,用于对数据的加密。

私钥:不能公开,只能自己知道,用于对数据的解密。

通过公钥对明⽂加密,变成密⽂,通过私钥对密⽂解密,变成明文。也可反过来。

客户端在发送请求的时候通过公钥进行加密,而服务端有私钥进行解密,理想情况下如图:

但是在实际上,在这中间也可以动手脚,"黑客"可以自己生成一个密钥发送给服务器。然后通过自己的密钥对服务器的相应进行解密,得到客户端与服务端的通信对称加密的密钥。

引入证书

中间人攻击(MITM)的基本原理

攻击方式

  1. 攻击者(如恶意 WiFi、ISP)拦截客户端与服务器的通信。

  2. 伪造一个假的服务器证书,让客户端误以为它是合法服务器。

  3. 解密并篡改流量(如窃取密码、注入广告)。

示例

  • 用户访问 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 流程
  1. 客户端访问 https://example.com

    • 服务器返回证书(含公钥 + CA 签名)。
  2. 浏览器验证证书

    • 检查 CA 是否受信、域名是否匹配、是否过期、是否吊销。
  3. 密钥交换

    • 客户端用服务器公钥加密 Pre-Master Secret,确保只有真实服务器能解密。
  4. 加密通信

    • 使用对称加密(如 AES)传输数据,中间人无法解密。

有了这几道过程之后,我们在网上的通信就变得更加安全,隐私也被保护的比较安全,一般情况下的"黑客"就无法直接获取到私密数据。有的人就会说 "那直接入侵服务器不就行了。" 要是有能力入侵服务器,还不如直接到数据库盗走数据,入侵的一般动机就是"金钱",有这本事的人也不会冒着这么大的风险挣钱,因为也不缺。本篇文章到此结束。

相关推荐
骁的小小站43 分钟前
Verilator 和 GTKwave联合仿真
开发语言·c++·经验分享·笔记·学习·fpga开发
计算机学姐2 小时前
基于微信小程序的高校班务管理系统【2026最新】
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
一路向北⁢2 小时前
基于 Apache POI 5.2.5 构建高效 Excel 工具类:从零到生产级实践
java·apache·excel·apache poi·easy-excel·fast-excel
游戏开发爱好者83 小时前
HTTPS 内容抓取实战 能抓到什么、怎么抓、不可解密时如何定位(面向开发与 iOS 真机排查)
android·网络协议·ios·小程序·https·uni-app·iphone
颜颜yan_4 小时前
UU远程——让工作、学习、娱乐跨设备无缝衔接,“远程”更像“身边”
学习·娱乐·远程工作
毕设源码-赖学姐5 小时前
【开题答辩全过程】以 基于Android的校园快递互助APP为例,包含答辩的问题和答案
java·eclipse
damo015 小时前
stripe 支付对接
java·stripe
麦麦鸡腿堡6 小时前
Java的单例设计模式-饿汉式
java·开发语言·设计模式
假客套6 小时前
Request method ‘POST‘ not supported,问题分析和解决
java
傻童:CPU6 小时前
C语言需要掌握的基础知识点之前缀和
java·c语言·算法