【面试题】HTTP与HTTPS的区别
- [1. HTTP 协议介绍](#1. HTTP 协议介绍)
- [2. HTTP 协议通信过程](#2. HTTP 协议通信过程)
- [3. HTTPS 协议](#3. HTTPS 协议)
-
- [3.1 HTTPS 协议介绍](#3.1 HTTPS 协议介绍)
- [3.2 HTTPS 的核心---SSL/TLS 协议](#3.2 HTTPS 的核心—SSL/TLS 协议)
-
- [3.2.1 SSL 和 TLS 的区别?](#3.2.1 SSL 和 TLS 的区别?)
- [3.2.2 SSL/TLS 的工作原理](#3.2.2 SSL/TLS 的工作原理)
-
- [3.2.2.1 非对称加密](#3.2.2.1 非对称加密)
- [3.2.2.2 对称加密](#3.2.2.2 对称加密)
- [4. 对比](#4. 对比)
- 总结
- 附录
1. HTTP 协议介绍
HTTP 协议,全称超文本传输协议(Hypertext Transfer Protocol)。顾名思义,HTTP 协议就是用来规范超文本的传输,超文本,也就是网络上的包括文本在内的各式各样的消息,具体来说,主要是来规范浏览器和服务器端的行为的。
并且,HTTP 是一个无状态(stateless)协议,也就是说服务器不维护任何有关客户端过去所发请求的消息。这其实是一种懒政,有状态协议会更加复杂,需要维护状态(历史信息),而且如果客户或服务器失效,会产生状态的不一致,解决这种不一致的代价更高。
2. HTTP 协议通信过程
HTTP 是应用层协议,它以 TCP(传输层)作为底层协议,默认端口为 80. 通信过程主要如下:
- 服务器在 80 端口等待客户的请求。
- 浏览器发起到服务器的 TCP 连接(创建套接字 Socket)。
- 服务器接收来自浏览器的 TCP 连接。
- 浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。
- 关闭 TCP 连接。
HTTP 协议优点:扩展性强、速度快、跨平台支持性好。
3. HTTPS 协议
3.1 HTTPS 协议介绍
HTTPS 协议(Hyper Text Transfer Protocol Secure)超文本传输安全协议 ,是 HTTP 的加强安全版本。HTTPS 是基于 HTTP 的 ,也是用 TCP 作为底层协议 ,并额外使用 SSL/TLS 协议用作加密和安全认证。默认端口号是 443。
HTTPS 协议中,SSL 通道通常使用基于密钥的加密算法,密钥长度通常是 40 比特或 128 比特。
HTTPS 协议优点:保密性好、信任度高。
3.2 HTTPS 的核心---SSL/TLS 协议
HTTPS 之所以能达到较高的安全性要求,就是结合了 SSL/TLS 和 TCP 协议,对通信数据进行加密,解决了 HTTP 数据透明的问题。接下来重点介绍一下 SSL/TLS 的工作原理。
3.2.1 SSL 和 TLS 的区别?
SSL 指安全套接字协议 (Secure Sockets Layer),首次发布与 1996 年。SSL 的首次发布其实已经是他的 3.0 版本,SSL 1.0 从未面世,SSL 2.0 则具有较大的缺陷(DROWN 缺陷------Decrypting RSA with Obsolete and Weakened eNcryption)。很快,在 1999 年,SSL 3.0 进一步升级,新版本被命名为 TLS 1.0。因此,TLS 是基于 SSL 之上的,但由于习惯叫法,通常把 HTTPS 中的核心加密协议混称为 SSL/TLS。
3.2.2 SSL/TLS 的工作原理
3.2.2.1 非对称加密
SSL/TLS 的核心要素是非对称加密。非对称加密采用两个密钥一个公钥,一个私钥。在通信时,私钥仅由解密者保存,公钥由任何一个想与解密者通信的发送者(加密者)所知。可以设想一个场景,
某个自助邮局,每个通信信道都是一个邮箱,每一个邮箱所有者都在旁边立了一个牌子,上面挂着一把钥匙:这是我的公钥,发送者请将信件放入我的邮箱,并用公钥锁好。但是公钥只能加锁,并不能解锁。解锁只能由邮箱的所有者------因为只有他保存着私钥。这样,通信信息就不会被其他人截获了,这依赖于私钥的保密性。

非对称加密的公钥和私钥需要采用一种复杂的数学机制生成(密码学认为,为了较高的安全性,尽量不要自己创造加密方案)。公私钥对的生成算法依赖于单向陷门函数。
3.2.2.2 对称加密
使用 SSL/TLS 进行通信的双方需要使用非对称加密方案来通信,但是非对称加密设计了较为复杂的数学算法,在实际通信过程中,计算的代价较高,效率太低,因此,SSL/TLS 实际对消息的加密使用的是对称加密。
对称加密:通信双方共享唯一密钥 k,加解密算法已知,加密方利用密钥 k 加密,解密方利用密钥 k 解密,保密性依赖于密钥 k 的保密性。

对称加密的密钥生成代价比公私钥对的生成代价低得多,那么有的人会问了,为什么 SSL/TLS 还需要使用非对称加密呢?因为对称加密的保密性完全依赖于密钥的保密性。在双方通信之前,需要商量一个用于对称加密的密钥。我们知道网络通信的信道是不安全的,传输报文对任何人是可见的,密钥的交换肯定不能直接在网络信道中传输。因此,使用非对称加密,对对称加密的密钥进行加密,保护该密钥不在网络信道中被窃听。这样,通信双方只需要一次非对称加密,交换对称加密的密钥,在之后的信息通信中,使用绝对安全的密钥,对信息进行对称加密,即可保证传输消息的保密性。
4. 对比
对比项 | HTTP | HTTPS |
---|---|---|
端口 | 80 | 443 |
安全性 | 明文传输,容易被窃听、篡改、劫持 | 加密传输,支持身份认证,防窃听、防篡改、防冒充 |
加密方式 | 无 | 使用 SSL/TLS(握手阶段:非对称加密,通信阶段:对称加密 + MAC) |
证书 | 不需要 | 需要 SSL/TLS 证书(CA 签发或自签名) |
性能 | 速度快(无加密开销) | 初始握手比 HTTP 慢,但后续通信差异不大(支持会话复用、TLS1.3 已大幅优化) |
浏览器显示 | 普通链接,无安全提示 | 地址栏显示 🔒 锁标志(或证书信息) |
应用场景 | 不涉及敏感数据的普通网页 | 涉及登录、支付、隐私等敏感操作的网站 |
总结
- 端口号: HTTP 默认是 80,HTTPS 默认是 443。
- URL 前缀: HTTP 的 URL 前缀是 http://,HTTPS 的 URL 前缀是 https://。
- 安全性和资源消耗: HTTP 协议运行在 TCP 之上,所有传输的内容都是明文 ,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密 ,但对称加密的密钥用服务器方的证书进行了非对称加密。 所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。
附录
- HTTP vs HTTPS(应用层) https://javaguide.cn/cs-basics/network/http-vs-https.html