架构与思维:了解Http 和 Https的区别(图文详解)
1 介绍
随着 HTTPS 的不断普及和使用成本的下降,现阶段大部分的系统都已经开始用上 HTTPS 协议。 HTTPS 与 HTTP 相比, 主打的就是安全概念,相关的知识如 SSL 、非对称加密、 CA证书、数据完整性保护 等,我们多多少少也都有听过。 本文重点从原理上讲解 HTTPS 的安全性,以及同HTTP的比较说明。
2 HTTP和HTTPS的比较
HTTP(全称:HyperText Transfer Protocol,超文本传输协议)和HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议)都是互联网中用于数据传输的协议,它们在多个方面有着显著的差异和特点。
2.1 HTTP
HTTP(Hypertext Transfer Protocol),是一种发送和接收HTML页面的方法,主要用于Web浏览器和网站服务器之间传递信息。它的主要特点如下:
1. 基于请求响应模式: HTTP协议采用客户端-服务器架构模式,客户端向服务器发送请求,服务器返回相应的响应。这种模式能有效分离应用逻辑,提高系统的可维护性和扩展性。
2. 基于文本传输: HTTP协议使用ASCII码作为通信协议,每个请求和响应都是一条文本消息,这使得通信协议更加简单、直观、易于处理。
3. 支持多媒体传输: HTTP协议可以传输多种类型的数据,如HTML、XML、JSON、图片、音频、视频等,这使得HTTP协议成为一种通用的网络传输协议,适用于各种不同类型的应用场景。
4. 无连接: HTTP协议是一个无连接协议,每个请求都是独立的,服务器处理请求后立即关闭连接。这有助于节省资源,但也带来了一些缺点,如需要重新建立连接、重复发送相同的头部信息等。
5. 无状态: HTTP协议没有客户端的状态存储,也没有事务处理的“内存”能力。这意味着每次访问网站时可能需要重复的登录操作。
然而,HTTP协议也存在一些不足之处。由于它以明文方式发送内容,不提供任何方式的数据加密,因此安全性较差。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。因此,HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等支付信息。
2.2 HTTPS
与HTTP相比,HTTPS(Hypertext Transfer Protocol Secure)则是以安全为目标的HTTP通道。它在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS的内容加密、身份验证以及数据完整性保护的原理主要依赖于SSL/TLS协议。下面我们详细来看看这几方面的实现原理。
2.2.1 内容加密
HTTPS使用对称加密和非对称加密相结合的方式来实现内容加密。
1. 对称加密:在密钥交换完成后,客户端和服务器会生成一个共享的会话密钥。这个会话密钥用于后续的加密和解密操作。双方使用这个会话密钥,通过对称加密算法(如AES)对传输的数据进行加密和解密,确保数据在传输过程中的安全性。
如上图,对称加密虽然保证了消息的保密性,但是因Client和Service共享一个密匙,这样就导致密匙特别容易泄露。
2. 非对称加密:在HTTPS的握手阶段,服务器会将其公钥发送给客户端。这个公钥用于后续的加密通信。客户端使用服务器的公钥加密一个随机数,然后将加密后的随机数发送给服务器。服务器使用其私钥解密这个随机数,从而确保双方都能安全地交换密钥,这个过程称为密钥交换。
如上图,
- 非对称加密时需要使用到接收方的公匙对消息进行加密,但是公匙不保密,可以截获客户端发来的消息,然后篡改形成攻击
- 非对称加密的性能会慢上至少几倍,增加系统消耗。因此,Https将两种加密结合起来使用。
2.2.2 身份验证
HTTPS使用数字证书来验证服务器的身份。
1. 数字证书:数字证书是由权威的证书颁发机构(CA)颁发的,包含了服务器的公钥、服务器的身份信息以及CA的签名等信息。当客户端与服务器建立HTTPS连接时,服务器会将其数字证书发送给客户端。
2. 验证过程:客户端收到服务器的数字证书后,会验证证书的合法性。首先,客户端会检查证书是否由受信任的CA颁发。然后,客户端会检查证书是否过期以及证书中的服务器身份信息是否与正在连接的服务器一致。最后,客户端会使用CA的公钥验证证书上的签名,确保证书在传输过程中没有被篡改。如果证书验证通过,客户端就可以确认服务器的身份是可信的。
2.2.3 数据完整性
HTTPS通过消息认证码(MAC)来确保数据的完整性。
1. 消息认证码:在HTTPS通信过程中,每个传输的数据包都会附带一个MAC值。这个MAC值是通过将数据包的内容和会话密钥一起输入到一个哈希函数中计算得出的。因此,只有持有相同会话密钥的接收方才能计算出正确的MAC值。
2. 完整性校验:当接收方收到数据包时,它会使用相同的会话密钥和哈希函数计算MAC值,并与数据包中附带的MAC值进行比较。如果两个MAC值相同,那么接收方就可以确认数据包在传输过程中没有被篡改,从而保证了数据的完整性和安全性。
2.2.4 端口
HTTP 默认使用 80 端口,而 HTTPS 默认使用 443 端口。
2.2.5 性能
因为HTTPS 需要进行加密和解密操作,因此它的性能可能略低于 HTTP。但随着技术的发展,这种性能差距已经接近可以忽略。
3 总结
HTTP和HTTPS在差异方面,最显著的是安全性。HTTP是明文传输协议,而HTTPS是加密传输协议。这种加密特性使得HTTPS在传输敏感信息时更具优势。此外,浏览器地址展示方式也有所不同,Https有绿色安全锁标志,而http则有网站不安全标志提醒。在协议层面,HTTPS在HTTP的基础上加入了SSL安全认证证书,从而提供了更高级别的安全防护。在涉及敏感信息传输的场景中,如在线购物、银行业务等,基本都是用HTTPS协议进行数据传输。