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,中间人可以做三类事:
- 窃听:看到账号、Cookie、请求内容。
- 篡改:往响应里插脚本、广告、恶意跳转。
- 冒充:伪装成目标网站欺骗用户。
TLS 正是围绕这三类风险设计的。
TLS 提供的三大能力
1. 机密性(Confidentiality)
传输内容被加密,旁路抓包的人看不懂明文。
2. 完整性(Integrity)
报文附带校验机制,防止中途被改了还不被发现。
3. 身份认证(Authentication)
通过证书链和 CA 体系,客户端尽量确认“我连的确实是目标站点”。
TLS 握手在做什么
面试不需要背每个字段,但要讲清三件事:
- 协商加密参数
- 验证服务端身份
- 建立后续通信用的会话密钥
为什么既有非对称加密,又有对称加密
标准答法:
- 非对称加密 适合密钥交换、身份认证,但性能较差。
- 对称加密 适合大规模数据传输,速度快。
所以 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 是极大提升安全性,不是神话。
3. 为什么说 HttpOnly Cookie 和 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 解决:防窃听、防篡改、防冒充。
- 握手核心:协商参数、验证证书、建立会话密钥。
- 大量业务数据传输主要靠对称加密,不靠纯非对称加密。