跳到主要内容

SSL/TLS 与 HTTPS:HTTPS 为什么安全,TLS 握手到底做了什么?

面试速答(30 秒版 TL;DR)

  • HTTPS 不是“新的应用层协议”,本质上还是 HTTP + TLS
  • TLS 解决三件事:机密性(防窃听)、完整性(防篡改)、身份认证(防冒充)。
  • 现代 Web 里常说“SSL/TLS”,但严格来说实际使用的是 TLS,SSL 已经是历史版本。
  • TLS 握手的核心目标是:协商密码套件、验证证书、建立会话密钥;真正大量传输数据时主要用对称加密,因为它更快。
  • 面试别说“HTTPS 绝对安全”,它主要保护传输链路;XSS、服务端泄露、终端被控不属于 TLS 能直接解决的问题。

先区分三个概念

1. HTTP

负责定义请求/响应语义,例如方法、路径、状态码、头字段。

2. TLS

负责加密、认证、完整性校验。

3. HTTPS

就是 跑在 TLS 之上的 HTTP

公式可以直接背:

  • HTTPS = HTTP + TLS

为什么需要 HTTPS

如果只有明文 HTTP,中间人可以做三类事:

  1. 窃听:看到账号、Cookie、请求内容。
  2. 篡改:往响应里插脚本、广告、恶意跳转。
  3. 冒充:伪装成目标网站欺骗用户。

TLS 正是围绕这三类风险设计的。


TLS 提供的三大能力

1. 机密性(Confidentiality)

传输内容被加密,旁路抓包的人看不懂明文。

2. 完整性(Integrity)

报文附带校验机制,防止中途被改了还不被发现。

3. 身份认证(Authentication)

通过证书链和 CA 体系,客户端尽量确认“我连的确实是目标站点”。


TLS 握手在做什么

面试不需要背每个字段,但要讲清三件事:

  1. 协商加密参数
  2. 验证服务端身份
  3. 建立后续通信用的会话密钥

为什么既有非对称加密,又有对称加密

标准答法:

  • 非对称加密 适合密钥交换、身份认证,但性能较差。
  • 对称加密 适合大规模数据传输,速度快。

所以 TLS 通常是:

  • 握手阶段更多依赖非对称密码学和密钥协商
  • 业务数据阶段主要用对称加密

证书到底在证明什么

服务端证书至少在证明:

  • 这个公钥属于谁
  • 哪些域名可以使用它
  • 有效期是什么
  • 谁签发了它

浏览器验证证书时,通常会检查:

  • 域名是否匹配
  • 是否在有效期内
  • 是否能建立到受信任根证书的信任链
  • 是否被吊销(不同实现策略会有差异)

面试里可以补一句:

  • 证书不是“证明网站绝对可信”,而是证明“这个公钥和某个身份绑定关系经过了 CA 体系背书”。

TLS 1.2 和 TLS 1.3 面试怎么区分

TLS 1.2

  • 握手流程相对更长
  • 历史兼容项更多
  • 密码套件组合更复杂

TLS 1.3

  • 握手更精简
  • 去掉很多旧算法与不安全选项
  • 延迟更低,安全默认更强

安全答法:

  • 现代站点应优先启用 TLS 1.3,并兼容必要的 TLS 1.2。

HTTPS 的性能代价和收益

代价

  • 首次建连需要额外 TLS 握手
  • 证书与加解密会带来 CPU 成本

收益

  • 保护登录态、隐私数据、接口响应
  • 防止中间人注入恶意内容
  • 现代浏览器很多能力都要求安全上下文,例如 Service Worker、部分传感器接口等

所以现在的结论几乎是:

  • 除内网极特殊场景外,Web 服务默认就该上 HTTPS

前端常见追问

1. HTTPS 能防止抓包吗?

能防止别人直接看懂明文,但不能阻止别人“看到你在和谁通信、通信时长多长、流量大小大概如何”。
而且如果终端本身被控、根证书被恶意注入,也可能被中间代理解密。

2. HTTPS 还能被中间人攻击吗?

如果证书校验链路被破坏、用户忽略证书错误、设备被植入恶意根证书,仍可能遭遇中间人攻击。
所以 HTTPS 是极大提升安全性,不是神话。

  • HTTPS 保护传输链路不被窃听
  • HttpOnly 限制前端 JS 读取 Cookie

两者解决的是不同层面风险,配合效果更好。

4. 前端怎么判断页面是不是安全上下文?

常见判断方式:

console.log(window.isSecureContext);

高频题标准答法

1. HTTPS 比 HTTP 多了什么?

多了一层 TLS。
HTTP 负责语义,TLS 负责加密、完整性校验和身份认证。

2. HTTPS 为什么不用纯非对称加密传所有数据?

因为纯非对称加密性能成本太高。
更合理的方式是:用非对称能力完成身份认证和密钥协商,再用对称密钥传业务数据。

3. 证书校验失败时浏览器为什么会报警?

因为浏览器无法确认当前公钥是否真的属于你要访问的站点,继续访问就可能遭遇中间人攻击。

4. HTTPS 能解决 XSS 和 CSRF 吗?

不能直接解决。
它解决的是传输链路安全;XSS、CSRF 需要输入输出编码、CSP、SameSite、Token 等其他手段。


易错点 / 坑

  • 把 SSL 和 TLS 当成完全等价的现代术语。
  • 说“HTTPS 把整个网站都加密了,所以绝对安全”。
  • 认为证书就是“服务器发我一个公钥”这么简单,忽略 CA 信任链。
  • 混淆“传输安全”和“业务安全”。

速记要点(可背诵)

  • HTTPS = HTTP + TLS
  • TLS 解决:防窃听、防篡改、防冒充
  • 握手核心:协商参数、验证证书、建立会话密钥
  • 大量业务数据传输主要靠对称加密,不靠纯非对称加密。