《Linux网络编程》5.HTTPS协议

💡Yupureki:个人主页

✨个人专栏:《C++》 《算法》《Linux系统编程》《高并发内存池》《MySQL数据库》

《个人在线OJ平台》《Linux网络编程》《CMake自动化构建工具》《Redis数据库》


🌸Yupureki🌸的简介:


目录

[1. HTTPS是什么](#1. HTTPS是什么)

[1.1 HTTPS和HTTP的区别](#1.1 HTTPS和HTTP的区别)

[2. 加密的概念](#2. 加密的概念)

[2.1 什么是加密?](#2.1 什么是加密?)

[2.2 为什么要加密?](#2.2 为什么要加密?)

[2.3 常见的加密方式](#2.3 常见的加密方式)

[1. 对称加密](#1. 对称加密)

[2. 非对称加密](#2. 非对称加密)

[3. 哈希算法](#3. 哈希算法)

[3. HTTPS的流程](#3. HTTPS的流程)

[3.1 只使用对称加密](#3.1 只使用对称加密)

[3.2 只使用非对称加密](#3.2 只使用非对称加密)

[3.3 双方都使用非对称加密](#3.3 双方都使用非对称加密)

[3.4 非对称加密 + 对称加密](#3.4 非对称加密 + 对称加密)

[3.5 非对称加密 + 对称加密 + 数字证书认证](#3.5 非对称加密 + 对称加密 + 数字证书认证)


1. HTTPS是什么

HTTPS 的全称是 超文本传输安全协议(HyperText Transfer Protocol Secure)。

简单来说,它就是 HTTP 的安全版本,用来在网页浏览器和网站服务器之间安全地传输数据。

你可以把它想象成给普通 HTTP 加上了一层"保护壳",这层壳就是 TLS(传输层安全协议),以前也叫 SSL。

1.1 HTTPS和HTTP的区别

普通的 HTTP 传输是明文的,就像寄明信片,内容在路上可以被任何人看到或篡改。而 HTTPS 是加密传输,相当于把信锁进一个只有你和收件人能打开的保险箱,别人即便截获也看不懂、改不了。

具体保护了这三点:

  • 加密(防偷窥):通信内容被加密,黑客抓包看到的只是一堆乱码。

  • 完整性(防篡改):数据如果在传输中被改动,接收方能立刻发现并拒绝。

  • 身份验证(防冒充):通过 CA 机构签发的数字证书,证明你访问的网站是真的,而不是假冒的钓鱼网站。

浏览器地址栏的开头是 https:// ,并且通常会显示一个小锁🔒图标 。默认使用 443 端口,而 HTTP 默认用 80 端口。

今天互联网上绝大多数网站(包括我们现在的对话)都已经默认使用 HTTPS,没有小锁的网站浏览器甚至会直接标记为"不安全"。

所以,HTTPS 就是"加了密的 HTTP",解决了 HTTP 明文传输不安全的问题。

2. 加密的概念

2.1 什么是加密?

简单说,加密就是把一段能看懂的信息(明文) ,通过特定规则和一把钥匙(密钥) ,转换成**看不懂的乱码(密文)**的过程。只有拥有对应钥匙的人,才能把乱码恢复成原文。

2.2 为什么要加密?

在数字世界里,加密能解决三大核心安全问题,也就是 HTTP 明文传输完全做不到的事:

  • 防偷窥(机密性)

    你的密码、聊天记录、银行卡号如果在网络上"裸奔",任何人都能轻易截获。加密后,即便数据被窃听,黑客也只能看到一串无意义的乱码。

  • 防篡改(完整性)

    加密通常与"完整性校验"一起工作。如果有人在路上偷偷改了你的数据(比如把收款账号改了),接收方用钥匙解不开或校验不通过,会立刻发现数据被动了手脚。

  • 防冒充(身份验证)

    在非对称加密中,"用公钥加密,只有对应私钥持有者才能解开"这个特性,还能用来验证对方的身份,确保你确实在跟真正的网站通信,而不是钓鱼网站。

2.3 常见的加密方式

现代加密主要分为三大类,HTTPS 里会混合用到它们:

1. 对称加密

加密和解密用的是同一把密钥

  • 特点:速度飞快,适合加密海量数据。但难在如何安全地把这把钥匙告诉对方,一旦钥匙在传输中被偷,加密就失效了。

  • 常见算法AES(今天最主流,微信、Wi-Fi 密码都用它)、ChaCha20。

  • 在HTTPS中的角色:证书验证通过后,用来加密传输的所有网页内容。

2. 非对称加密

有两把数学上相关的钥匙:公钥私钥。公钥可公开给任何人,私钥则必须严格保密。

  • 核心逻辑:公钥加密的内容,只有对应私钥能解开;反之,用私钥签名,别人可用公钥验证签名是否由你发出。

  • 特点:完美解决了对称加密"密钥传输被偷"的问题,但计算慢,不适合处理大量数据。

  • 常见算法RSAECC(椭圆曲线,在移动端更高效安全)。

  • 在HTTPS中的角色:握手阶段,用来安全地传递那个"对称加密的钥匙",以及验证网站身份的数字签名。

3. 哈希算法

严格来说它不是加密,因为无法从结果反推出原文。它把任意长度的数据,变成固定长度的一串数字(比如几十位的十六进制串)。

  • 特点 :哪怕是原文的一丁点改动,生成的"指纹"都会截然不同。常用于 检查数据是否被篡改安全存储密码

  • 常见算法SHA-256、SHA-3。

  • 在HTTPS中的角色:对证书信息生成摘要,并用CA的私钥签名,形成最终的数字证书。

3. HTTPS的流程

3.1 只使用对称加密

  • 工作过程

    1. 你和服务器事先约定好一把相同的密钥。

    2. 你发消息时,用这把密钥加密;服务器收到后,用同一把密钥解密。

    3. 全程使用 AES 等算法,速度极快。

  • 致命缺陷:密钥配送问题

    你俩怎么隔着满是窃听者的互联网,安全地约定这第一把钥匙?如果通过网络明文发送,就会被直接截获,后续加密形同虚设。线下见面约定又不现实。

结论:单用对称加密,无法解决互联网通信的安全初始化问题。

3.2 只使用非对称加密

  • 工作过程

    1. 服务器公布公钥,私藏私钥。

    2. 浏览器用服务器的公钥加密消息,只有服务器的私钥能解开。

    3. 反过来,服务器用私钥加密(签名),浏览器用公钥解密(验证)。

    4. 公钥公开传输,不怕被截获,完美解决了方案1的难题。

  • 致命缺陷:性能极差且不安全

    • RSA 等非对称算法计算极慢,是 AES 的成百上千倍,不适合加密大量网页数据。

    • 无法抵御中间人攻击:攻击者可以截获服务器的公钥,然后把自己的公钥冒充成服务器的发给你。整个过程你毫无察觉,攻击者就成了一个能解密、查看并重新加密转发的透明代理。

结论:非对称加密安全解决了密钥分发,但性能差,且存在公钥身份被篡改的风险。

3.3 双方都使用非对称加密

  • 工作过程

    1. 不仅服务器有公钥私钥,客户端也要生成自己的公私钥对。

    2. 通信时,客户端用服务器的公钥加密,再用自己的私钥签名;服务器则反过来操作。

  • 缺陷

    方案2的性能问题身份冒充风险一个都没解决,反而因为客户端也要进行复杂运算(对当时的移动设备是灾难),让整个过程更慢、更重。它只是互相确认了来源,但未解决根本问题。

3.4 非对称加密 + 对称加密

这是关键转折点,HTTPS 的混合加密原理由此诞生。

  • 工作过程

    1. 握手阶段(用非对称,慢但安全)

      浏览器获取服务器公钥,然后生成一把临时的对称密钥,用服务器的公钥加密后发给它。只有服务器能解开。

    2. 数据传输阶段(用对称,快)

      双方都用这把临时对称密钥,进行 AES 高速加密通信。

  • 它解决了什么

    完美结合了非对称加密的安全密钥协商能力,和对称加密的高性能。方案1和方案2的缺陷被巧妙互补。

  • 它依然没解决的致命问题
    你拿到的真的是谷歌的公钥吗?

    中间人攻击依然有效。攻击者可以把自己的公钥冒充成谷歌的,在握手时解密你的"临时对称密钥",从而破解全程。这个方案只防了被动窃听,防不住主动的身份冒充。此时,整套系统的信任根基是空的。

3.5 非对称加密 + 对称加密 + 数字证书认证

为了解决"公钥身份真伪"这个最终难题,我们引入了第三方信任体系。

  • 工作过程(就是标准 TLS 握手的完整应用)

    1. 证书颁发 :谷歌服务器把自己的公钥、域名等信息,提交给受信任的 CA 机构。CA 核实身份后,用自己的私钥对整个信息作数字签名,生成证书。

    2. 证书验证 :浏览器访问谷歌时,拿到的不再是裸公钥,而是这个数字证书 。浏览器用内置的 CA 公钥 验证证书签名,确保证书内容未被篡改,并核对域名。

    3. 建立加密:验证通过后,双方再用方案4的混合加密方式,安全协商对称密钥并通信。

  • 它解决了什么

    通过引入 CA 这个信任锚点,成功将公钥身份绑定。攻击者无法伪造签名,一旦篡改公钥或被冒充,证书验证立刻失败,浏览器会发出警告。至此,安全三要素------机密性、完整性和身份验证------才全部达成。

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
网络研究院3 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展