#30 计算机基础 中等

HTTP 和 HTTPS 的区别?TLS 握手了解多少?

HTTPHTTPSTLS证书握手

🎯 考察意图

网络基础题,数据/后端岗常用来铺垫「为什么拉数必须走 HTTPS、证书过期作业全挂、中间人能改报文」。考察候选人能否从明文、完整性、身份认证三条线讲清 HTTP 和 HTTPS 的差别,并口述 TLS 握手在交换什么,而不是只背「HTTPS = HTTP + SSL」。

📐 回答框架

  1. 先给一句话:HTTP 明文传输;HTTPS 是 HTTP over TLS,多了加密、完整性、服务端身份认证。
  2. 按对比项说:端口、是否加密、谁证明对方是谁、中间人能不能改。
  3. 口述 TLS 握手:协商版本/套件 → 验证书 → 用非对称/密钥交换得到对称会话密钥 → 后续用对称加密传 HTTP。
  4. 落到数据工作:拉数 API、Webhook、对象存储、证书过期与内网自签。

💬 参考答案(口述版)

一句话:HTTP 是明文的应用层协议;HTTPS 不是另一种协议,而是把 HTTP 报文放进 TLS 隧道里传——先确认对面大概是谁、再谈好一把对称密钥,之后的请求体、Cookie、Token 才不裸奔。

对比着说最清楚:
1. 端口与栈:习惯上 HTTP 用 80,HTTPS 用 443。对应用来说还是「请求行 + Header + Body」,多出来的是底下那层 TLS。
2. 机密性:HTTP 链路里任何一跳(公司代理、公共 Wi-Fi、错误的旁路镜像)都能读到 URL、Header、Body。HTTPS 用对称加密保护载荷,抓到的是密文。
3. 完整性:TLS 带 MAC / AEAD,报文被改会校验失败;HTTP 没有这层,中间人改个字段你可能毫无感知。
4. 身份:HTTPS 靠服务端证书证明「你连的是 example.com,不是隔壁冒充的」。证书由 CA 签名,客户端用系统/浏览器信任锚验签、查域名、查有效期。HTTP 没有对端身份,DNS 被劫持你也看不出来。

TLS 握手(1.2 口述版,面试够用):
1. ClientHello:我支持的 TLS 版本、密码套件、一个随机数。
2. ServerHello:选定版本和套件、服务端随机数,并甩出证书链。
3. 客户端验证书:域名对不对、有没有过期、链能不能追到信任的根 CA。通不过就中断,浏览器那把锁打不开。
4. 密钥交换:RSA 旧流程是客户端生成 pre-master 用证书公钥加密传过去;现代更常见 ECDHE,双方用临时椭圆曲线公钥算出同一份共享密钥,还带前向保密——服务器长期私钥日后泄露,也解不开过去的会话。
5. ChangeCipherSpec / Finished:双方用握手材料派生会话密钥,切到对称加密,互发 Finished 校验握手没被篡改。之后才是真正的 HTTP 请求。

TLS 1.3 把上面压成 1-RTT(甚至 0-RTT 复用),套件只留 AEAD,废弃 RSA 密钥封装,但「验身份 → 谈对称密钥 → 再传 HTTP」这条没变。

连到数据工作:
- 拉业务 API、广告回传、支付回调:必须 HTTPS,否则 Token 和 PII 在链路上裸奔。
- Airflow / Spark 读 S3、调 Webhook:证书过期、公司代理 MITM、自签证书没进信任库,表现就是 SSLCertVerificationError,作业全红。
- 内网服务用自签可以,但要把 CA 配进客户端信任库,或明确走双向 TLS(mTLS)做服务身份,而不是关校验「先跑通」。
- HTTPS 只保护传输,不代替鉴权:证书对了,接口没 Token、没签名,照样能被刷。

口述收尾:先说「HTTPS = HTTP 套 TLS,管加密、完整、身份」,再主动提「握手是为了换对称密钥」和「证书过期作业会挂」,面试官一般就不会停在概念题上。

🔍 关键词

TLS证书链对称密钥前向保密中间人

💭 面试官可能的追问

追问 1:TLS 握手为什么不一直用非对称加密传数据?

非对称(RSA/ECC)算得慢、只适合交换少量密钥材料。对称加密(AES-GCM 等)吞吐高,适合传 Body、拉大文件、流式接口。握手的意义就是「用贵的非对称谈出一把便宜的对称会话密钥」,会话内都走对称。TLS 1.3 还强调 ECDHE 前向保密:长期证书私钥泄露,历史流量仍然解不开。

追问 2:证书过期或公司代理拦截 HTTPS,数据作业会怎样?怎么处理?

客户端校验证书失败会直接断连接,Python requests 常见 CERTIFICATE_VERIFY_FAILED。先看是过期、域名不匹配,还是公司 SSL 代理塞了自己的根证书。处理:换新证、把公司 CA 加进信任库、确认 SNI/域名。不要图省事 verify=False——等于退回「谁都能冒充」。内网自签同样要把 CA 配好,而不是关校验。

追问 3:HTTPS 能防重放、防接口被刷吗?和签名鉴权怎么分工?

HTTPS 防的是链路上被偷、被改、被假冒站点;防不了「合法客户端拿着 Token 狂刷」或「抓包后再对同一 URL 重放」(尤其 TLS 1.3 的 0-RTT)。接口还要鉴权、时间戳/nonce、幂等键。数据回传常见做法是 HTTPS + HMAC 签名 + 时间窗,传输安全和业务防重放是两层。

⚠️ 常见踩坑

  • 说 HTTPS 是另一种协议,或只背「加了 SSL」却说不清加密/完整/身份三件事
  • 把证书当成「加密算法本身」,说不清证书是身份证明、会话密钥才是加密用的
  • 以为 HTTPS 就等于接口安全,忽略 Token、签名、重放
  • 作业遇证书错误就 verify=False,等于主动关掉中间人防护

🧠 记忆锚点

HTTPS 是 HTTP 套 TLS:握手用证书验身份并换出对称密钥,之后才加密传报文。