linux学习笔记(43)网络编程——HTTPS (补充)
HTTPs
HTTPS(HyperText Transfer Protocol Secure)是在 HTTP 基础上加入 SSL/TLS 加密协议 的安全版协议,核心目标是解决 HTTP 明文传输的安全问题(窃听、篡改、伪装)。下面从 加密原理、工作流程、核心优势 三个方面详细讲解:
一、HTTPS 的核心:SSL/TLS 加密层
HTTPS 并非全新协议,而是 “HTTP + SSL/TLS” 的组合:
- 底层仍基于 TCP 协议建立连接。
- 在 HTTP 和 TCP 之间增加 SSL/TLS 层,负责数据加密、身份验证和完整性校验。
SSL(Secure Sockets Layer)是早期协议,已被 TLS(Transport Layer Security)取代(目前主流是 TLS 1.2/1.3),但习惯上仍统称 “SSL 加密”。
二、HTTPS 的加密方式:混合加密机制
HTTPS 采用 “非对称加密 + 对称加密” 结合的方式,兼顾安全性和效率:
- 非对称加密:
- 有一对密钥:公钥(公开,可发给任何人)和 私钥(保密,仅服务器持有)。
- 特点:用公钥加密的数据,只能用私钥解密;用私钥加密的数据(签名),只能用公钥验证。
- 作用:在通信初期安全交换 对称加密的密钥(避免密钥被窃听),并验证服务器身份。
- 对称加密:
- 只有一个密钥(会话密钥),加密和解密用同一密钥。
- 特点:加密效率极高(比非对称加密快 100-1000 倍),适合大量数据传输。
- 作用:用于后续所有 HTTP 数据的加密传输(因为非对称加密效率低,不适合大数据)。
三、HTTPS 的工作流程(TLS 握手过程)
HTTPS 通信前,客户端和服务器会先完成 TLS 握手(协商加密规则、交换密钥、验证身份),再用协商好的密钥传输数据。以主流的 TLS 1.2 为例,简化流程如下:
- 客户端发起请求(Client Hello):
- 客户端向服务器发送支持的 TLS 版本(如 TLS 1.2)、加密算法列表(如 RSA、AES)、一个随机数(Client Random)。
- 服务器回应(Server Hello):
- 服务器从客户端的列表中选择合适的 TLS 版本和加密算法,返回自己的随机数(Server Random),并附上 服务器证书(包含公钥和网站域名等信息)。
- 客户端验证证书:
- 客户端检查证书有效性:是否由信任的 CA 机构颁发、是否过期、域名是否匹配当前访问的网站。
- 若证书无效,浏览器会提示 “不安全” 警告(用户可选择继续或终止);若有效,客户端从证书中提取服务器的 公钥。
- 客户端生成会话密钥并加密传输:
- 客户端生成一个新的随机数(Premaster Secret),用服务器的公钥加密后发给服务器(只有服务器的私钥能解密)。
- 客户端和服务器分别用之前的两个随机数(Client Random + Server Random)和 Premaster Secret 计算出 相同的会话密钥(对称加密密钥)。
- 确认握手完成:
- 客户端和服务器分别用会话密钥加密一条 “握手完成” 消息发给对方,验证密钥是否一致。
- 握手成功后,后续所有 HTTP 数据都用 会话密钥 进行对称加密传输。
四、HTTPS 的核心优势
- 数据加密:所有传输数据被会话密钥加密,第三方即使拦截也无法解密(解决 “窃听” 问题)。
- 身份验证:通过 CA 证书验证服务器身份,防止恶意分子伪造网站(如钓鱼网站,解决 “伪装” 问题)。
- 数据完整性:传输过程中会对数据生成 “消息摘要”(哈希值),若数据被篡改,接收方会发现摘要不匹配(解决 “篡改” 问题)。
五、HTTPS 的额外细节
- 证书成本:SSL 证书可从 CA 机构申请,有免费证书(如 Let's Encrypt)和付费证书(验证更严格,适合金融、电商等场景)。
- 性能影响:TLS 握手会增加 1-2 个 RTT(网络往返时间)的延迟,加解密也会消耗服务器资源,但现代优化(如 TLS 1.3 简化握手、硬件加速)已大幅降低影响。
- SEO 友好:搜索引擎(如 Google、百度)优先收录 HTTPS 网站,HTTP 网站可能被标记 “不安全” 影响用户信任。
总结
HTTPS 通过 SSL/TLS 协议的混合加密机制,在不改变 HTTP 核心逻辑的前提下,解决了数据传输的安全问题,是目前互联网的标准安全协议。其核心流程是 “用非对称加密交换对称密钥,用对称密钥加密实际数据”,既保证了安全性,又兼顾了传输效率。
http跟https的区别
HTTP(HyperText Transfer Protocol,超文本传输协议)和 HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是用于在网络上传输数据的协议,核心区别在于安全性,具体差异如下:
1. 安全性
- HTTP:明文传输数据,所有信息(包括账号密码、支付信息等)在网络中以明文形式传递,容易被第三方窃听、篡改或伪造(如 “中间人攻击”),安全性极低。
- HTTPS:通过 SSL/TLS 协议对数据进行加密传输,相当于在 HTTP 层和 TCP 层之间增加了一个加密层。数据在传输前会被加密,第三方即使拦截到数据也无法解密,且能验证服务器身份(防止伪装)和数据完整性(防止篡改),安全性极高。
2. 协议端口
- HTTP:默认使用 80 端口(如 http://example.com:80 可简写为 http://example.com)。
- HTTPS:默认使用 443 端口(如 https://example.com:443 可简写为 https://example.com)。
3. 证书要求
- HTTP:无需证书,任何服务器都可以直接使用 HTTP 提供服务。
- HTTPS:需要向权威证书机构(CA,如 Let's Encrypt、Symantec) 申请 SSL 证书(部分免费,部分付费),用于验证服务器身份。浏览器会内置信任的 CA 列表,若证书无效(如过期、非信任 CA 颁发),会提示 “不安全” 警告。
4. 传输速度
- HTTP:无需加密、解密过程,传输效率更高(少了 SSL/TLS 握手和加密的开销)。
- HTTPS:由于增加了 SSL/TLS 握手(协商加密算法、交换密钥)和数据加解密步骤,会产生额外的时间和性能消耗,传输速度略慢于 HTTP(但现代优化已大幅缩小差距)。
5. 应用场景
- HTTP:适用于对安全性要求极低的场景(如静态资源展示、非敏感信息浏览),但目前已逐渐被淘汰,主流网站均不再使用。
- HTTPS:适用于所有涉及敏感信息的场景(如登录、支付、电商、社交等),是目前互联网的主流协议,也是浏览器(如 Chrome、Firefox)推荐的安全标准(对 HTTP 网站会标记 “不安全”)。
总结
对比项 | HTTP | HTTPS |
安全性 | 明文传输,不安全 | SSL/TLS 加密,安全 |
端口 | 80 | 443 |
证书 | 无需 | 需要 CA 颁发的 SSL 证书 |
速度 | 较快(无加密开销) | 稍慢(有加密 / 握手开销) |
核心差异 | 无加密层 | 基于 HTTP + SSL/TLS 加密层 |
简单来说,HTTPS 是 “加密版的 HTTP”,通过加密解决了 HTTP 的安全漏洞,是目前网络通信的主流安全协议。