HTTPS实现原理

1 为什么需要HTTPS?

HTTP 在进行数据传输时采用明文传输 ,数据包中的用户信息等隐私数据可以被第三方通过抓包等方式窃取,是不安全的。

如果客户端使用 MD5 加密算法对数据进行加密,由于加密后的结果是不可逆的,服务器无法进行解析,只能使用加密后的字符串进行校验用户身份,而第三方也可以获取数据包中的加密字符串,从而骗取服务器的信任,所以也无法通过 MD5 加密算法解决 HTTP 传输不安全的问题。

为了解决 HTTP 明文传输不安全的问题,比 HTTP 安全的 HTTPS 应运而生。

2 HTTPS是什么?

HTTPS = HTTP + SSL/TLS。HTTPS 使用 HTTP 进行通信,并使用 SSL/TLS 在进行数据传输时对数据包进行加密,确保数据进行安全传输。

SSL (Secure Sockets Layer) 是由 Netscape 公司设计的用于 Web 的安全通信协议,开发至 3.0 版本后交由 IETF 进行标准化,IETF 在 SSL 3.0 基础上开发出了 TLS 1.0 (Transport Layer Security),并写入了 RFC。

3 对称加密与非对称加密

3.1 对称加密

对称加密,顾名思义,通信双方采用相同的密钥对数据进行加解密,常见的对称加密算法有 AES、DES、3DES等。

通信过程:在接收到客户端的请求后,服务器生成一把密钥,并通过网络发送给客户端,客户端拿到密钥后对数据进行加密,将加密后的数据发送给服务器,服务器再使用密钥对数据进行解密。

优点:加解密计算量小,速度快。

缺点:由于只有一个密钥供通信双方使用,所以密钥需要在一方生成后传输给另一方,在传输过程中存在被截获的风险。

3.2 非对称加密

非对称加密,顾名思义,加密和解密使用不同的密钥:公钥 (Public Key) 和私钥 (Private Key)。公钥和私钥是一对密钥,使用公钥加密的数据只能通过对应的私钥解密,使用私钥加密的数据也只能通过对应的公钥解密。常见的非对称加密算法有 RSA 等。

通信过程:在接收到客户端的请求后,服务器生成一对密钥,并将其中一把作为公钥通过网络发送给客户端,客户端拿到公钥后对数据进行加密,将加密后的数据发送给服务器,服务器使用私钥对数据进行解密。

优点:加密和解密使用不同的密钥,私钥不用进行网络传输,安全性高。

缺点:加解密计算量大,速度慢,资源占用大。

4 HTTPS原理

HTTPS 采用混合加密方式进行数据传输。考虑到对称加密的密钥可能被截获以及非对称加密计算量大,速度慢的缺点,先采用非对称加密传输密钥,然后采用对称加密对数据包进行加解密。

在接收到客户端的请求后,服务器生成一对公钥和私钥,并把公钥发送给客户端,客户端拿到公钥后,生成用于对称加密的密钥 KEY,然后用公钥对 KEY 进行加密并发送给服务器,服务器接收到后使用私钥进行解密获得 KEY,然后客户端和服务器就可以使用这个相同的 KEY 对数据包进行加解密,如下图所示。

但是,按照上述过程就能保证安全了吗?

答案是否定的。貌似我们对服务器发出的公钥有很强的信任。试想一下,客户端和服务器之间有个中间人,其也可以获取服务器发出的公钥,如果他拦截了服务器要发送给客户端的公钥,并伪造了一把公钥然后再发送给客户端,在客户端使用伪造的公钥加密 KEY 并发出后进行拦截,那么他就可以窃取到客户端生成的 KEY,从而可以获取到客户端与服务器之间通信的数据包中的用户信息,导致严重的后果。

那么,如何确保客户端收到的公钥是可信的呢?这就需要能够证明服务器身份的数字证书了。

采用 HTTPS 通信的服务器需要向第三方数字证书认证机构 (CA) 申请数字证书(需要付费,安全等级越高价格越贵),机构在进行审核后会颁发电子证书,同时产生一对公钥和私钥,私钥由服务器自己保存,公钥则附加在证书信息中,与证书一起公开。证书本身也带有一个电子签名,该签名用于校验证书的完整性和真实性,可以防止证书被篡改。

所以,在进行数据传输前会增加证书验证的过程。服务器接收到客户端的请求后,将数字证书发送给客户端,里面包含了公钥。客户端接收到证书后会对证书进行校验,校验不通过则会向用户提示警告信息。校验通过后则取出公钥并对 KEY 进行加密,然后发送给服务器,服务器接收到加密后的 KEY 以后使用私钥进行解密,然后客户端和服务器采用对称加密的方式进行数据传输,如下图所示。

5 参考链接

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 - SegmentFault 思否

相关推荐
kyriewen10 小时前
重排、重绘、合成:浏览器渲染的“三兄弟”,你惹不起也躲不过
前端·javascript·浏览器
爱学习的程序媛14 小时前
浏览器内核揭秘:JavaScript 和 UI 的“主线程争夺战”
前端·性能优化·浏览器·web
怣疯knight1 天前
网站显示浏览器缓存其他考生信息该怎么解决
浏览器·网站
有意义2 天前
深入理解浏览器存储方案:从Cookie到JWT登录认证
前端·面试·浏览器
Yunpiere2 天前
浏览器指纹追踪原理怎么理解
浏览器
Irene19912 天前
前端开发浏览器推荐:4款主流浏览器组合(Chrome、Firefox、Edge、Safari)
浏览器
REDcker6 天前
WebXR 技术详解:标准、生态与开发入门
浏览器·web
牛奶6 天前
5MB vs 4KB vs 无限大:浏览器存储谁更强?
前端·浏览器·indexeddb
x-cmd9 天前
[x-cmd] 专为 AI Agent 设计的无头浏览器,比 Chrome 速度快 9 倍且少用 16 倍内存 | Lightpanda
前端·chrome·ai·自动化·agent·浏览器·x-cmd
小贺儿开发9 天前
Unity3D LED点阵屏幕模拟
http·unity·浏览器·网络通信·led·互动·点阵屏