写在前面
相信不少经历过面试的同学,都被面试官拷打过这样一道题目—— “ HTTP和HTTPS有什么区别? ”
HTTP和HTTPS是现阶段最常用的两种协议,用于在Web浏览器和Web服务器之间传输数据。虽然HTTP可以传输数据,但是它的安全性却无法保障,而HTTPS使用 SSL/TLS 协议对数据进行加密,能够提供更高的安全性。本文将对HTTP和HTTPS之间的区别展开探讨。
一、何谓HTTPS
HTTPS(HyperText Transfer Protocol Secure)是一种基于TLS/SSL协议加密传输的HTTP协议,是HTTP协议的安全版本。HTTPS能够为Web浏览器与服务器之间的通信提供保密性、完整性和身份认证。HTTPS协议在数据传输过程中对传输的数据进行加密,确保数据在传输过程中不被窃取、篡改或伪造,同时还可以验证对方的身份,确保数据发送和接收的对象是预期的合法实体。
简单来说,HTTPS就是基于HTTP中加了一把锁(SSL/TLS协议),确保数据传输的安全性,防止数据被恶意篡改或窃取。
二、HTTPS通信的建立
- 客户端发送HTTPS请求
客户端向服务器发送一个HTTPS请求,请求中包含一个随机数(Client random)和客户端支持的加密算法列表。
- 服务器响应证书
服务器会把自己的证书(包含公钥和其他信息)返回给客户端。
- 客户端验证证书
客户端接收到服务器返回的证书后,会验证证书的合法性。这个过程包括以下步骤:
a. 验证证书的有效性:检查证书的有效期、颁发者等信息是否正确。
b. 验证证书的合法性:验证证书是否由可信的证书颁发机构(CA)签发,并且证书中包含的服务器名称与客户端访问的服务器名称是否匹配。
c. 验证证书的链:验证证书颁发者的证书是否有效,并递归地验证证书颁发机构的证书,直到根证书。
4. 客户端生成随机数并加密
客户端会生成一个随机数(Pre-master secret),并使用服务器返回的公钥加密该随机数,并将加密后的内容发送给服务器。
- 服务器解密并生成会话密钥
服务器接收到加密后的随机数后,使用自己的私钥对其进行解密,得到Pre-master secret。接下来,服务器会根据客户端和服务器共同支持的加密算法和随机数生成会话密钥(Session key)。
- 客户端和服务器协商加密方式
客户端和服务器使用客户端和服务器支持的加密算法和会话密钥来协商加密方式,并生成对称密钥(Symmetric key)。
- 客户端发送加密数据
客户端使用对称密钥加密请求数据,并发送到服务器。
- 服务器接收加密数据
服务器使用对称密钥解密请求数据,并对数据进行处理,最后将处理结果加密后返回给客户端。
三、为何选用 SSL/TLS 协议
(1)采用混合加密机制
- 公开密钥加密(非对称加密)
- 身份验证和密钥协商阶段使用
- 共享密钥加密(对称加密)
- 加密数据传输阶段使用
(2)基于证书的服务器身份验证
在 HTTPS 中,证书主要用于验证网站的身份。证书由第三方机构(称为证书颁发机构,CA)颁发,并包含网站的公钥、网站的域名以及证书颁发机构的签名等信息。
在 HTTPS 通信的过程中,客户端会向服务器发起请求,服务器会返回自己的证书,客户端会验证证书的有效性和可信性,如果验证通过,则与服务器建立安全通信连接。如果验证失败,则通信连接会中断。
证书可以保证通信双方的身份,避免中间人攻击和信息泄露,提高通信的安全性。
参考
SSL/TLS协议运行机制的概述 - 阮一峰的网络日志 (ruanyifeng.com) RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 (rfc-editor.org)