前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
  • HTTP

    • 基础篇

      • HTTP的前世今生
      • HTTP是什么
      • HTTP世界全览
      • HTTP分层
      • 键入网址到回车发生什么
      • HTTP报文是什么样子的
      • 理解请求方法
      • URI
      • 响应状态码
      • HTTP有哪些特点
      • HTTP优缺点
      • HTTP的实体数据
      • HTTP传输大文件
      • HTTP的连接管理
      • HTTP的重定向
      • HTTP的Cookie机制
      • HTTP的缓存控制
      • HTTP的代理服务
      • HTTP的缓存代理
    • 高级篇

    • 扩展篇

  • 浏览器相关

  • 计算机基础

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

数字签名与证书|HTTP协议篇

# 数字签名与证书

30 秒速记

  • 仅有加密只能保障机密性,不能证明密文未被篡改,也不能证明通信对象真实可信。
  • 攻击者即使不知道会话密钥,仍可能截获、修改或重放密文,并利用服务端响应继续分析。
  • 如果公钥本身被攻击者替换,客户端会把敏感数据加密给错误对象,混合加密随即失去保护作用。
  • 完整的安全通信至少需要同时解决机密性、完整性和身份认证;数字签名与证书主要补足后两项能力。
  • 证书要解决的是公钥与真实身份之间的可信绑定,而不是提升加密算法本身的强度。

数字签名用来验证内容和发送者,证书则负责把公钥与真实身份可信地绑定起来。 只做加密只能防止别人读懂数据,攻击者仍可能篡改密文,甚至替换公钥,让客户端把敏感信息加密给错误对象。比如浏览器访问 HTTPS 站点时,会检查证书链、有效期、域名和用途,再决定是否信任站点公钥。证书不保证网站业务诚实,签名也不隐藏内容,私钥保护和终端信任库同样重要。

黑客虽然拿不到会话密钥,无法破解密文,但可以通过窃听收集到足够多的密文,再尝试着修改、重组后发给网站。因为没有完整性保证,服务器只能“照单全收”,然后他就可以通过服务器的响应获取进一步的线索,最终就会破解出明文。

另外,黑客也可以伪造身份发布公钥。如果你拿到了假的公钥,混合加密就完全失效了。你以为自己是在和“某宝”通信,实际上网线的另一端却是黑客,银行卡号、密码等敏感信息就在“安全”的通信过程中被窃取了。

所以,在机密性的基础上还必须加上完整性、身份认证等特性,才能实现真正的安全。

原理拆解: 机密性回答“旁观者能否读懂”,完整性回答“内容是否被改动”,身份认证回答“对端究竟是谁”。仅把数据加密并不会自动覆盖后两项:若使用缺少认证能力的加密方式,攻击者可能修改密文,使解密结果发生可预测或不可预测的变化;若客户端拿到的是攻击者替换后的公钥,则加密过程虽然数学上正确,密文却只能由攻击者解开。重放还说明完整性并不等于新鲜性,协议通常需要序号、随机数或时效信息共同约束。

具体实现: 数字签名通常先对消息计算摘要,再由私钥产生签名;验证方用公钥检查签名,可发现内容变化并确认签名者掌握对应私钥。证书则由受信任的 CA 对主体信息、公钥、有效期和用途等内容签名,把公钥绑定到域名或其他身份。浏览器访问 HTTPS 站点时,会验证证书链、有效期、域名匹配和用途,然后才把证书公钥视为该站点可信密钥。

边界与反例: 签名不负责隐藏消息,公开的签名数据仍可被读取;证书也不保证网站业务诚实,只证明某个公钥与经验证的身份标识存在可信绑定。攻击者若控制受信任私钥、终端信任库或合法站点本身,证书校验仍可能通过,因此私钥保护、吊销机制和终端安全同样重要。现代安全协议一般使用带认证的加密模式,同时提供机密性与消息完整性,但它仍不能替代证书承担的身份绑定。

工程验证: 可在浏览器开发者工具的安全面板查看证书主题、签发者、有效期和证书链,并对比地址栏域名。测试环境中分别访问过期证书、域名不匹配证书和自签名证书,预期浏览器均给出不同的信任错误。若证书显示正常却仍怀疑被代理,应继续检查证书指纹、系统信任库是否新增根证书,以及代理设备是否重新签发了站点证书。

面试官追问

追问 1支付接口已把请求体加密,攻击者虽然看不懂内容,却能修改密文并观察服务器响应;研发据此声称机密性已经足够,你会认可吗?
参考回答

不会,机密性只解决旁观者能否读懂,并不保证密文未被修改或对端身份可信。缺少认证能力的加密可能使解密结果发生变化,还可能形成响应侧信道;协议仍需完整性保护和身份认证,并根据威胁模型补充防重放措施。

追问 2前端从登录接口返回值中读取一个公钥后立即加密密码,代码没有验证证书或公钥来源;上线评审时你最担心什么?
参考回答

最危险的是攻击者替换接口返回的公钥,让加密过程在数学上完全正确,却只能由攻击者解密。客户端应通过可信证书链把公钥绑定到目标域名,并检查有效期、域名匹配和用途;仅看到一个格式合法的公钥不足以确认对端身份。

追问 3文件签名平台要求“签名后任何人都不能看到原文”,并准备删除原有加密模块;这个需求与方案是否匹配?
参考回答

不匹配,数字签名用于发现内容变化并证明签名方掌握对应私钥,不负责隐藏消息。公开的原文和签名仍可被读取;若业务同时要求保密,应保留适当的加密保护,并分别处理密钥机密性和签名私钥安全。

追问 4测试环境证书显示“有效”,但浏览器访问 api.example.com 仍提示身份不可信;你会按什么顺序排查?
参考回答

不能只看有效期,应继续核对证书主题或扩展名是否匹配 api.example.com、证书链是否能到达受信任根,以及证书用途是否适合该连接。若仍怀疑被代理,再比对证书指纹、系统信任库新增根证书和代理是否重新签发站点证书。

追问 5安全团队建议把“证书校验通过”直接解释为“该商城业务绝对可信”,产品准备据此移除风控提示;你会同意吗?
参考回答

不会,证书只证明某个公钥与经验证的域名或其他身份标识存在可信绑定,不保证网站经营行为诚实。合法站点被入侵、私钥失窃或终端信任库被控制时,校验仍可能通过;业务风控和终端安全不能由证书替代。

追问 6订单接口对每个请求都做了签名,但同一份合法密文可被重复提交并造成重复扣款;为什么完整性校验没有拦住它?
参考回答

签名能证明内容未变并验证私钥持有者,却不自动证明请求是本次新产生的。协议或业务层还需使用序号、随机数、时效信息或幂等标识约束重放;具体组合取决于系统威胁模型,不能把签名成功等同于请求新鲜。

# 摘要算法

30 秒速记

  • 摘要算法把任意长度输入映射为固定长度结果,主要用于识别数据是否发生变化,不负责恢复原文。
  • 它不使用解密密钥,计算方向具有单向性;输入发生细微变化时,输出通常会显著改变。
  • 由于输出空间有限,不同输入理论上可能产生相同摘要,因此安全性关键在于抗碰撞能力,而不是绝对不存在碰撞。
  • 摘要长度由算法决定:题干给出的 MD5、SHA-1、SHA-256 分别输出 16、20、32 字节。
  • 按题干所述的 TLS 语境,MD5 与 SHA-1 安全强度不足,应使用 SHA-2 系列;具体可用算法仍需以实际 TLS 版本和实现配置为准。

摘要算法会把任意长度的数据映射成固定长度的摘要,用于判断内容是否发生变化,不能用来还原原文。 它没有解密密钥,并具有单向性和雪崩效应,输入只改一点,输出通常也会明显不同。由于这是从大空间映射到小空间,碰撞在理论上无法避免,所以工程上看重的是抗碰撞能力。MD5、SHA-1 的安全强度不足,实际使用哪种 SHA-2 算法还要结合具体 TLS 版本和配置。

实现完整性的手段主要是摘要算法(Digest Algorithm),也就是常说的散列函数、哈希函数(Hash Function)。

你可以把摘要算法近似地理解成一种特殊的压缩算法,它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,就好像是给这段数据生成了一个数字“指纹”。

换一个角度,也可以把摘要算法理解成特殊的“单向”加密算法,它只有算法,没有密钥,加密后的数据无法解密,不能从摘要逆推出原文

摘要算法实际上是把数据从一个“大空间”映射到了“小空间”,所以就存在“冲突”(collision,也叫碰撞)的可能性,就如同现实中的指纹一样,可能会有两份不同的原文对应相同的摘要。好的摘要算法必须能够“抵抗冲突”,让这种可能性尽量地小。

因为摘要算法对输入具有“单向性”和“雪崩效应”,输入的微小不同会导致输出的剧烈变化,所以也被 TLS 用来生成伪随机数(PRF,pseudo random function)。

你一定在日常工作中听过、或者用过 MD5(Message-Digest 5)、SHA-1(Secure Hash Algorithm 1),它们就是最常用的两个摘要算法,能够生成 16 字节和 20 字节长度的数字摘要。但这两个算法的安全强度比较低,不够安全,在 TLS 里已经被禁止使用了。

目前 TLS 推荐使用的是 SHA-1 的后继者:SHA-2。

SHA-2 实际上是一系列摘要算法的统称,总共有 6 种,常用的有 SHA224、SHA256、SHA384,分别能够生成 28 字节、32 字节、48 字节的摘要。

你可以用实验环境的 URI“/25-1”来测试一下 TLS 里的各种摘要算法,包括 MD5、SHA-1 和 SHA-2

https://www.chrono.com/25-1?algo=md5
https://www.chrono.com/25-1?algo=sha1
https://www.chrono.com/25-1?algo=sha256
@前端进阶之旅: 代码已经复制到剪贴板

面试官追问

追问 1素材平台保存了上百万文件,后端把 MD5 相同直接当成内容绝对相同并合并存储;你会批准这条去重规则吗?
参考回答

不能把摘要相同视为数学意义上的内容必然相同,因为任意长度数据映射到固定长度空间必然存在碰撞。若误合并会造成安全或高价值数据损失,应改用更强摘要,并在关键路径增加长度、元数据或原始内容校验,代价是额外计算与存储。

追问 2发布流水线要校验配置包是否被改动,开发只保存一份 SHA-256 并在下载后重新计算;这能定位具体改了哪一行吗?
参考回答

它适合判断输入是否发生变化,但不能指出具体修改位置。摘要的雪崩效应会让一个字符变化引起输出显著不同;若需要定位差异,还应保留版本、清单或逐文件摘要,而不能从最终摘要反推出变更内容。

追问 3客服系统计划只存用户留言的 SHA-256,半年后再从摘要恢复原文用于审计;这套数据设计能实现吗?
参考回答

不能,摘要是无密钥的单向映射,会把大输入空间压缩到固定长度空间,无法可靠逆推出原文。需要恢复内容时应保存受控的原文或采用可解密方案;摘要可用于变更校验,但不能同时承担可恢复存储。

追问 4TLS 配置扫描发现仍使用 MD5 或 SHA-1 相关摘要,负责人以“输出长度固定且已有多年代码”为由拒绝调整;你会怎样评审?
参考回答

不能以接口稳定替代安全强度评估,来源明确指出 MD5 和 SHA-1 安全强度较低,在 TLS 中已被禁止使用。应检查实际协商和签名配置,迁移到 SHA-2 系列;迁移前还要确认上下游兼容性,不能只替换字符串名称。

追问 5线上上传校验偶发不一致,业务文件肉眼看起来相同,但两端计算出的 SHA-256 完全不同;你会先查哪些输入差异?
参考回答

先确认两端计算的是完全相同的字节序列,包括编码、换行、序列化结果和传输过程中是否发生转换。摘要具有雪崩效应,极小的字节差异也会产生显著不同的结果;若输入字节一致仍不匹配,再核对算法和输出编码实现。

追问 6接口防篡改方案把请求体的 SHA-256 摘要与请求一起明文发送,团队认为攻击者无法逆推原文,所以完整性已经成立;这个取舍可靠吗?
参考回答

不可靠,单向性只限制由摘要恢复原文,并不阻止攻击者修改请求后重新计算一个新摘要。需要把完整性校验与攻击者无法伪造的认证机制结合,例如由可信密钥参与签名或认证;具体协议选择超出摘要本身能力,不能靠公开摘要独立完成。

# 完整性

30 秒速记

  • 发送方计算消息摘要,接收方对收到的消息重新计算并比对,可以检测传输内容是否发生变化。
  • 单独附加公开摘要不能抵抗主动攻击:攻击者修改明文后,也能重新计算并替换摘要。
  • 完整性校验要具备抗伪造能力,必须引入攻击者不知道的秘密,而不只是选择一种哈希算法。
  • 题干中的方案是在受保护通信中结合会话密钥处理消息与摘要,并将相关机制称为 HMAC。
  • 完整性只回答内容是否被改动,不等同于机密性,也不天然完成通信主体的身份认证。

完整性校验用于发现消息是否被改动,但只在原文后附一个公开摘要并不能抵抗主动攻击。 接收方可以重新计算摘要并比对,可攻击者若能同时修改明文和摘要,校验结果依然会一致。本质上还要引入攻击者不知道的秘密,例如结合会话密钥构造 HMAC,让对方无法伪造合法校验值。完整性不等于机密性,也不能单独证明通信对象的真实身份。

← 对称加密与非对称加密TLS1.2连接过程解析 →

fe
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
  • HTTP

    • 基础篇

      • HTTP的前世今生
      • HTTP是什么
      • HTTP世界全览
      • HTTP分层
      • 键入网址到回车发生什么
      • HTTP报文是什么样子的
      • 理解请求方法
      • URI
      • 响应状态码
      • HTTP有哪些特点
      • HTTP优缺点
      • HTTP的实体数据
      • HTTP传输大文件
      • HTTP的连接管理
      • HTTP的重定向
      • HTTP的Cookie机制
      • HTTP的缓存控制
      • HTTP的代理服务
      • HTTP的缓存代理
    • 高级篇

    • 扩展篇

  • 浏览器相关

  • 计算机基础