当前位置: 首页 > news >正文

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)传输数据,中间人无法解密。

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

相关文章:

  • 第二十次博客打卡
  • 【日撸 Java 三百行】Day 18(循环队列)
  • 101. 对称二叉树
  • MGX:多智能体管理开发流程
  • 时钟产生的公共模块示例
  • C++动态内存分配
  • 【AI面试秘籍】| 第11期:大模型“复读机“难题的破局之道
  • Vue百日学习计划Day9-15天详细计划-Gemini版
  • STM32 ADC+DMA+TIM触发采样实战:避坑指南与源码解析
  • 如何有效的开展接口自动化测试?
  • 面试题:详细分析Arraylist 与 LinkedList 的异同
  • 【Spring AI】本地大模型接入MCP实现联网搜索
  • 综合项目:博客
  • Python之三大基本库——Matplotlib
  • 对称二叉树的判定:双端队列的精妙应用
  • 源码:处理文件格式和字符集的相关代码(3-3)
  • Spring WebFlux与Quarkus实战:云原生微服务开发的两大主流框架深度解析
  • 一分钟了解机器学习
  • Linux系统启动相关:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD
  • 割点与其例题
  • 外企聊营商|上海仲裁:化解跨国企业纠纷的“上海路径”
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 铁路端午假期运输火车票今日开售,12306提升应对超大规模并发访问需求能力
  • 中国进出口银行:1-4月投放制造业中长期贷款超1800亿元
  • 证监会发布《上市公司募集资金监管规则》,6月15日起施行
  • 一图看懂|印巴交火后,双方基地受损多少?