HTTPS 和 HTTP 的区别是什么?
一则或许对你有用的小广告
欢迎 加入小哈的星球 ,你将获得: 专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目: 《Spring AI 项目实战(问答机器人、RAG 增强检索、联网搜索)》 正在持续爆肝中,基于
Spring AI + Spring Boot3.x + JDK 21..., 点击查看; - 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot3.x + JDK 17..., 点击查看项目介绍; 演示链接: http://116.62.199.48:7070/; - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
面试考察点
-
基础掌握度:面试官不仅仅是想知道 HTTPS 比 HTTP "更安全",更是想知道你是否理解安全的本质——数据是如何被加密的、证书的作用是什么、整个安全通信链路是如何建立的。
-
原理理解深度:考察你是否了解 HTTPS 的底层实现,包括 SSL/TLS 握手过程、对称加密与非对称加密的结合使用、数字证书的验证链等核心机制。
-
实践应用意识:如果你了解 HTTPS 的性能开销、证书部署方式、以及在实际项目中如何正确配置 HTTPS,说明你不只是 "懂理论",还有 "实战经验"。
核心答案
HTTP 和 HTTPS 的核心区别如下:
| 对比维度 | HTTP | HTTPS |
|---|---|---|
| 全称 | HyperText Transfer Protocol | HyperText Transfer Protocol Secure |
| 端口 | 80 | 443 |
| 安全性 | 明文传输,数据裸奔 | SSL/TLS 加密,数据安全 |
| 证书 | 不需要 | 需要 CA 颁发的数字证书 |
| 性能 | 无加密开销,更快 | 握手有开销,但现代优化后差距很小 |
| SEO | 无加成 | 搜索引擎优先收录 |
一句话总结:HTTPS = HTTP + SSL/TLS,通过加密传输和身份认证,解决了 HTTP 的三大安全问题——窃听、篡改、冒充。
深度解析
一、HTTP 的三大安全缺陷
在了解 HTTPS 之前,先要搞清楚 HTTP 为什么 "不安全":
上图展示了 HTTP 面临的三大安全威胁:
-
窃听风险:HTTP 数据以明文形式传输,就像寄信时把信封敞开,任何中间节点(路由器、代理、黑客)都能看到内容。你在咖啡厅连 WiFi 登录网银,旁边的黑客就能抓包看到你的账号密码。
-
篡改风险:HTTP 没有完整性校验机制,数据在传输过程中被修改,接收方根本不知道。运营商可以在网页里插入广告,黑客可以修改下载的软件包植入木马。
-
冒充风险:HTTP 没有身份验证机制,客户端无法确认服务器的真实身份。你以为是 "工商银行",其实是黑客搭建的钓鱼网站。
二、HTTPS 如何解决这三大问题
HTTPS 通过 SSL/TLS 协议 层层设防,彻底解决了上述三个问题:
上图展示了 HTTPS 的防护架构:
-
加密解决窃听:使用对称加密算法(如 AES)加密数据,即使黑客截获数据包,看到的也是一堆乱码,没有密钥就无法解密。
-
校验解决篡改:使用消息认证码(HMAC)对数据进行签名,接收方验证签名,如果数据被篡改,签名就对不上,直接丢弃。
-
证书解决冒充:服务器必须持有 CA 机构颁发的数字证书,客户端会验证证书的合法性,确保你访问的是真正的服务器,而不是钓鱼网站。
三、HTTPS 的核心:SSL/TLS 握手过程
HTTPS 的安全性建立在 SSL/TLS 握手之上。握手的核心目标是:安全地协商出一个对称加密密钥。为什么用对称加密?因为对称加密快。但对称加密的密钥怎么安全传输?用非对称加密来传输密钥!
上图展示了 SSL/TLS 握手的核心流程:
-
协商加密套件:客户端告诉服务器 "我支持这些加密算法",服务器选择一个双方都支持的套件。常见的套件如
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。 -
证书验证:服务器发送数字证书,客户端验证证书的合法性。这是防止 "中间人攻击" 的关键——只有真正的服务器才能持有有效的证书。
-
密钥交换:客户端生成一个 "预主密钥"(Pre-Master Secret),用服务器的公钥加密后发送。只有持有私钥的服务器才能解密。
-
生成会话密钥:双方用随机数 C、随机数 S、预主密钥,通过 PRF 函数计算出最终的 "会话密钥"(Session Key)。后续所有数据都用这个密钥进行对称加密。
-
握手验证:双方发送加密的 Finished 消息,验证握手过程没有被篡改。
四、混合加密:兼顾安全与性能
HTTPS 使用了 "非对称加密 + 对称加密" 的混合加密方案:
上图展示了混合加密的设计思路:
-
非对称加密用于密钥交换:只在握手阶段使用,虽然慢但安全。用它来安全地传输对称密钥。
-
对称加密用于数据传输:握手完成后,所有业务数据都用对称加密。AES-GCM 的加密速度可以达到每秒几 GB,性能开销几乎可以忽略。
-
完美前向保密 (PFS):现代 HTTPS 使用 ECDHE 密钥交换,每次会话生成新的临时密钥对。即使服务器的私钥将来泄露,过去的会话数据也无法被解密。
五、数字证书与 CA 信任链
HTTPS 的安全性依赖于数字证书,而证书的安全性依赖于 CA(证书颁发机构)的信任链:
上图展示了证书信任链的验证过程:
-
根 CA 证书:预装在操作系统或浏览器中,如 DigiCert、GlobalSign 等。这些是信任的起点,根 CA 的私钥通常离线保管,极其安全。
-
中间 CA 证书:根 CA 签发中间 CA,中间 CA 负责日常的证书签发工作。这样根 CA 的私钥不需要经常使用,降低泄露风险。
-
服务器证书:网站运营者向 CA 申请证书,CA 验证域名所有权后签发。证书包含域名、公钥、有效期等信息,并用 CA 的私钥签名。
-
验证链:浏览器收到证书后,沿着 "服务器证书 → 中间 CA → 根 CA" 的链条逐级验证签名,直到到达信任的根证书。任何一级验证失败,连接就会被终止。
六、HTTP vs HTTPS 性能对比
很多人担心 HTTPS 会影响性能,实际上现代 HTTPS 的性能开销已经非常小:
上图展示了 HTTPS 的性能分析:
-
握手开销:首次连接需要额外的 TLS 握手(1-2 RTT),但对于长连接或会话复用场景,这个开销可以忽略。
-
传输开销:现代 CPU 的 AES-NI 指令集使得对称加密的性能开销小于 1%,基本可以忽略。
-
TLS 1.3 优化:最新版本的 TLS 1.3 将握手减少到 1 RTT,大大降低了延迟。
-
实际体验:在 HTTP/2 的加持下,HTTPS 的综合性能甚至可能超过 HTTP,因为多路复用减少了连接数。
面试高频追问
-
追问一:HTTPS 一定安全吗?有哪些攻击方式?
- HTTPS 加密的是传输过程,但无法防止客户端被植入恶意证书、DNS 劫持、服务端漏洞等。常见攻击包括:SSL 剥离(降级攻击)、中间人攻击(伪造证书)、BEAST/POODLE 等协议漏洞攻击。
-
追问二:TLS 1.2 和 TLS 1.3 有什么区别?
- TLS 1.3 移除了不安全的加密算法(如 RSA 密钥交换、RC4、SHA-1),握手从 2 RTT 减少到 1 RTT,支持 0-RTT 恢复,安全性更高、速度更快。
-
追问三:对称加密和非对称加密有什么区别?各自适合什么场景?
- 对称加密:加解密用同一把密钥,速度快,适合大量数据加密;非对称加密:公钥加密私钥解密,安全但慢,适合密钥交换和数字签名。HTTPS 混合使用两者。
-
追问四:什么是 CA 证书?浏览器如何验证证书的合法性?
- CA 证书是由证书颁发机构签发的数字证书。浏览器验证:检查证书是否过期、域名是否匹配、签名是否有效、颁发 CA 是否在信任列表中,逐级验证直到根证书。
常见面试变体
- 变体一:"为什么 HTTPS 比 HTTP 安全?请详细说明。"
- 变体二:"请解释 HTTPS 的握手过程。"
- 变体三:"HTTPS 用到了哪些加密算法?为什么这样设计?"
- 变体四:"什么是数字证书?CA 的作用是什么?"
记忆口诀
HTTP 三宗罪:窃听(明文)、篡改(无校验)、冒充(无认证)。
HTTPS 三层防:加密(对称)、校验(HMAC)、认证(证书)。
混合加密:非对称传密钥(安全),对称传数据(快速)。
一句话总结:HTTPS = HTTP + SSL/TLS,用证书认证身份,用非对称加密交换密钥,用对称加密传输数据。
总结
HTTPS 通过 SSL/TLS 协议 在 TCP 之上构建了安全层,用 数字证书 解决身份认证,用 非对称加密 安全交换密钥,用 对称加密 高效传输数据,用 消息认证码 保证数据完整性。现代 HTTPS 在 TLS 1.3 和 HTTP/2 的加持下,性能开销已可忽略,安全与效率兼得。