第14章 安全http
从密码、密钥、签名、证书进入SSL/TLS握手、证书验证、HTTPS客户端和代理隧道
第14章 安全http
“第14章 安全http”锁定David Gourley、Brian Totty、Marjorie Sayer、Sailu Reddy、Anshu Aggarwal著,陈涓、赵振平译《HTTP权威指南》,人民邮电出版社,2012年,ISBN 9787115281487;英文原版HTTP: The Definitive Guide,O'Reilly Media,2002年9月,656页,ISBN 1565925092。O'Reilly官方页面确认英文首版的5个正文部分、21章和8个附录;中文版完整印刷目录另含“第六部分 附录”和索引。忠实度分母共586个部分、章、编号节/小节、附录与索引节点。
“第14章 安全http”未取得未获授权的完整中文正文;课程以 O’Reilly 官方在线版 与 章级导览 界定首版范围,中文解释、报文、实验和练习均为独立教学重写。现代语义仅以 RFC 9110、RFC 9111 和 RFC 9112 核对差异。
学习目标
- 能解释“第14章 安全http”的全部正式节点及其HTTP事务位置。
- 能绘制请求、响应、TCP连接、中间实体和资源状态。
- 能设计单变量实验,验证“HTTPS连接能证明目标名称、证书链、有效期、密钥协商、加密方向和HTTP字节边界”。
- 能写出含首版边界、原始报文、故障、恢复和复核人的证据包。
从一条可证伪的HTTP事务开始
先预测:只看到加密锁标志而不验证主机名与证书链仍可能遭遇中间人。把预测写成“URL/资源、连接、请求报文、中间实体、响应报文、身份与编码”六行,再运行客户端、代理或服务器。结果不同先定位首个字节或状态偏差。
本页主问题是:从密码、密钥、签名、证书进入SSL/TLS握手、证书验证、HTTPS客户端和代理隧道。每条消息要注明发送者、接收者、HTTP版本、连接复用、逐跳/端到端首部、主体边界与历史协议状态。
验收不变量是:HTTPS连接能证明目标名称、证书链、有效期、密钥协商、加密方向和HTTP字节边界。最终页面正常、状态码200或TLS通道建立都只是局部事实,不能单独证明资源身份、缓存变体、代理转发与证书身份全部正确。
核心词汇与首版边界
↡在SSL/TLS安全传输之上交换HTTP的方案、↡由签发者签名并把身份与公钥绑定的数据结构、↡加密与解密共享同一秘密的密码密钥、↡非对称密码中可公开用于加密或验证签名的密钥、↡协商版本、算法、身份和会话密钥的安全连接建立过程
这些词汇固定在2002年英文首版和2012年中译本语境。在“第14章 安全http”中,HTTP/2、HTTP/3、OAuth、JWT、SameSite、HSTS和现代CDN行为只作独立比较,不得替换HTTP-NG、Digest、WebDAV、WPAD等首版节点。
核心机制深读
先从HTTPS画出事务
从密码、密钥、签名、证书进入SSL/TLS握手、证书验证、HTTPS客户端和代理隧道。先固定资源身份和请求目标,再标出客户端、中间实体与源服务器,任何优化或安全结论都不能跳过原始报文。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
区分HTTPS与数字证书
HTTPS和数字证书可能在同一事务中协作,但责任、状态位置和失败语义不同。对比正常请求、单个首部变化和单个连接故障,定位首个偏差。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
让对称密钥经过真实中间实体
代理、缓存、网关或隧道会读取、添加、删除或转发不同首部。逐跳记录Via、Connection列出的字段、缓存决策和认证边界。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
验证公开密钥的历史语境
原书写于2002年,以HTTP/1.0、HTTP/1.1、SSL/TLS早期版本和当时Web基础设施为背景。现代实现可做对照,但不能冒充原书节点。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
用SSL握手关闭证据门
HTTPS连接能证明目标名称、证书链、有效期、密钥协商、加密方向和HTTP字节边界。证据至少包含原始请求/响应、TCP时间线、中间状态、失败注入、恢复动作和第三方复核。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
首版机制逐项深读
第14章 安全http
验证“第14章 安全http”使用正常证书、错误主机名和不受信任签发者三组连接,保存握手失败位置与客户端拒绝原因。
14.1 保护http 的安全
验证“14.1 保护http 的安全”使用正常证书、错误主机名和不受信任签发者三组连接,保存握手失败位置与客户端拒绝原因。
14.2 数字加密
“14.2 数字加密”描述以算法和密钥把明文变成密文的基本模型;安全性来自密钥与经过分析的算法,而不是隐藏算法名称或自制变换。
14.2.1 密码编制的机制与技巧
“14.2.1 密码编制的机制与技巧”描述以算法和密钥把明文变成密文的基本模型;安全性来自密钥与经过分析的算法,而不是隐藏算法名称或自制变换。
14.2.2 密码
“14.2.2 密码”属于挑战—响应认证:服务器给出保护域与挑战参数,客户端生成凭据,验证端检查身份、时效和重放条件;Base64 本身不保密。
14.2.3 密码机
“14.2.3 密码机”描述以算法和密钥把明文变成密文的基本模型;安全性来自密钥与经过分析的算法,而不是隐藏算法名称或自制变换。
14.2.4 使用了密钥的密码
“14.2.4 使用了密钥的密码”描述以算法和密钥把明文变成密文的基本模型;安全性来自密钥与经过分析的算法,而不是隐藏算法名称或自制变换。
14.2.5 数字密码
“14.2.5 数字密码”描述以算法和密钥把明文变成密文的基本模型;安全性来自密钥与经过分析的算法,而不是隐藏算法名称或自制变换。
14.3 对称密钥加密技术
“14.3 对称密钥加密技术”让通信双方共享同一秘密用于加解密,计算高效但密钥分发困难;密钥泄露会同时破坏机密性与身份信任。
14.3.1 密钥长度与枚举攻击
“14.3.1 密钥长度与枚举攻击”在本章用于回答“从密码、密钥、签名、证书进入SSL/TLS握手、证书验证、HTTPS客户端和代理隧道”。学习时必须把这个名称落到具体报文、连接、中间状态或历史规范,并说明它改变了哪项可观察结果。
14.3.2 建立共享密钥
“14.3.2 建立共享密钥”在本章用于回答“从密码、密钥、签名、证书进入SSL/TLS握手、证书验证、HTTPS客户端和代理隧道”。学习时必须把这个名称落到具体报文、连接、中间状态或历史规范,并说明它改变了哪项可观察结果。
14.4 公开密钥加密技术
“14.4 公开密钥加密技术”使用成对密钥:公钥可公开,私钥必须保密;它解决部分密钥分发问题,但仍需证书绑定公钥与身份。
14.4.1 rsa
“14.4.1 rsa”是原书语境中的公开密钥算法实例,安全性依赖密钥长度、填充和正确实现;实际 HTTPS 通常用它认证或协商,而非加密大体量内容。
14.4.2 混合加密系统和会话密钥
“14.4.2 混合加密系统和会话密钥”解决无状态请求之间的关联问题;识别线索、Cookie 与登录会话的可靠性和隐私边界不同,不能把弱关联当成已认证身份。
14.5 数字签名
“14.5 数字签名”用私钥对数据摘要产生可验证值,公钥持有者可检查完整性和签名者控制的密钥;它不自动提供保密性。
14.6 数字证书
“14.6 数字证书”保护传输中的字节,不自动解决端点权限、应用日志或存储泄露;代理隧道还需约束目标和端口。
14.6.1 证书的主要内容
“14.6.1 证书的主要内容”把主体名称、公钥、有效期、用途和签发者签名装入证书;客户端还要验证信任链、时间、主机名和用途。
14.6.2 x.509 v3 证书
“14.6.2 x.509 v3 证书”把主体名称、公钥、有效期、用途和签发者签名装入证书;客户端还要验证信任链、时间、主机名和用途。
14.6.3 用证书对服务器进行认证
“14.6.3 用证书对服务器进行认证”位于服务器处理流水线:接收连接后解析请求、映射资源、执行访问控制、构造响应并记录日志;每一步都应留下可归责的输入与输出。
14.7 https——细节介绍
分析“14.7 https——细节介绍”要分开证书链、主机名、有效期、算法协商和会话密钥;只看到锁形图标不能证明每项均正确。
14.7.1 https 概述
验证“14.7.1 https 概述”使用正常证书、错误主机名和不受信任签发者三组连接,保存握手失败位置与客户端拒绝原因。
14.7.2 https 方案
“14.7.2 https 方案”用基准 URI、目标 URI 与最终请求目标三列核对,尤其区分相对引用解析、默认端口和只在客户端使用的片段。
14.7.3 建立安全传输
“14.7.3 建立安全传输”把 HTTP 放入经过身份验证的加密通道;证书校验目标主机,握手协商密钥与算法,记录层保护后续字节。
14.7.4 ssl 握手
“14.7.4 ssl 握手”协商协议与密码套件、认证服务器并建立会话密钥;只有握手成功且证书校验通过,后续 HTTP 字节才进入可信加密通道。
14.7.5 服务器证书
验证“14.7.5 服务器证书”固定 URL 与身份,只改变一项映射或权限配置,比较服务器选择的资源、状态码和日志责任字段。
14.7.6 站点证书的有效性
“14.7.6 站点证书的有效性”把主体名称、公钥、有效期、用途和签发者签名装入证书;客户端还要验证信任链、时间、主机名和用途。
14.7.7 虚拟主机与证书
验证“14.7.7 虚拟主机与证书”使用正常证书、错误主机名和不受信任签发者三组连接,保存握手失败位置与客户端拒绝原因。
14.8 https 客户端实例
“14.8 https 客户端实例”保护传输中的字节,不自动解决端点权限、应用日志或存储泄露;代理隧道还需约束目标和端口。
14.8.1 openssl
验证“14.8.1 openssl”使用正常证书、错误主机名和不受信任签发者三组连接,保存握手失败位置与客户端拒绝原因。
14.8.2 简单的https 客户端
“14.8.2 简单的https 客户端”保护传输中的字节,不自动解决端点权限、应用日志或存储泄露;代理隧道还需约束目标和端口。
14.8.3 执行openssl 客户端
“14.8.3 执行openssl 客户端”保护传输中的字节,不自动解决端点权限、应用日志或存储泄露;代理隧道还需约束目标和端口。
14.9 通过代理以隧道形式传输安全流量
“14.9 通过代理以隧道形式传输安全流量”的实验固定客户端与源站,只插入或移除一个中间节点,再比较两侧原始报文、认证边界和错误归属。
14.10 更多信息
“14.10 更多信息”是原书的延伸资料入口,不增加新的协议结论;使用时必须记录资料版本、适用的 HTTP 年代和与本章结论的对应关系。
14.10.1 http 安全性
“14.10.1 http 安全性”保护传输中的字节,不自动解决端点权限、应用日志或存储泄露;代理隧道还需约束目标和端口。
14.10.2 ssl 与tls
“14.10.2 ssl 与tls”保护传输中的字节,不自动解决端点权限、应用日志或存储泄露;代理隧道还需约束目标和端口。
14.10.3 公开密钥基础设施
“14.10.3 公开密钥基础设施”使用成对密钥:公钥可公开,私钥必须保密;它解决部分密钥分发问题,但仍需证书绑定公钥与身份。
14.10.4 数字密码
“14.10.4 数字密码”描述以算法和密钥把明文变成密文的基本模型;安全性来自密钥与经过分析的算法,而不是隐藏算法名称或自制变换。
复原原始HTTP事务
固定URL、资源、连接与版本,写出请求行、首部、主体、响应和所有中间实体。
HTTP/1.1 message laboratory
第14章 安全http
从密码、密钥、签名、证书进入SSL/TLS握手、证书验证、HTTPS客户端和代理隧道
GET /resource?chapter=%E7%AC%AC14%E7%AB%A0%20%E5%AE%89%E5%85%A8http HTTP/1.1 Host: example.test Connection: keep-alive
章内坐标:第14章 安全http、14.1 保护http 的安全、14.2 数字加密、14.2.1 密码编制的机制与技巧、14.2.2 密码、14.2.3 密码机、14.2.4 使用了密钥的密码、14.2.5 数字密码
可复现实验记录
GET /resource HTTP/1.1
Host: example.test
Connection: keep-alive
Accept: */*HTTP/1.1 200 OK
Date: Tue, 01 Jan 2002 00:00:00 GMT
Content-Type: text/plain
Content-Length: 5
helloevidence = request_bytes + response_bytes + tcp_timeline + intermediary_state + recovery动手试:保存一次正常请求、一次缓存或连接边界和一次单变量故障。记录客户端、代理、缓存、网关与源服务器看到的原始报文,以及统一时间戳和恢复动作。
独立证据门
最小证据包包含:首版节点、URL、原始请求/响应、连接时间线、代理与缓存决策、身份和编码、单变量故障、恢复、偏差、责任人与复核人。
练习
练习
问题 1:为什么“第14章 安全http”必须固定2002年首版?
问题 2:怎样构造“只看到加密锁标志而不验证主机名与证书链仍可能遭遇中间人”的最小反例?
问题 3:何时可以认为本页完成独立交接?
本章回顾
“第14章 安全http”的核心是从密码、密钥、签名、证书进入SSL/TLS握手、证书验证、HTTPS客户端和代理隧道。真正掌握不是记首部名,而是能用原始报文、连接和中间状态证明资源如何被定位、传输、缓存、保护与交付。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- HTTPS
在SSL/TLS安全传输之上交换HTTP的方案。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- 数字证书
由签发者签名并把身份与公钥绑定的数据结构。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- 对称密钥
加密与解密共享同一秘密的密码密钥。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- 公开密钥
非对称密码中可公开用于加密或验证签名的密钥。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- SSL握手
协商版本、算法、身份和会话密钥的安全连接建立过程。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。