HTTP 最凸出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。
但同时也有很多缺点,如:
总结一下就是HTTP 存在着极大的信息安全风险。
这也就是我们经常会在 Web 的登录页面和购物结算界面等使用的是HTTPS
通信而不是HTTP
的原因。
为了统一解决HTTP
的不足,需要在 HTTP
上再加入加密处理和认证 等机制。
我们把添加了加密及认证机制的 HTTP
称为 HTTPS
(HTTP Secure)。
即 : HTTPS = HTTP+加密+认证+完整性保护
也就是说HTTP 加上加密处理和认证以及完整性保护后即是 HTTPS 。
HTTPS
并非是应用层的一种新协议。
只是HTTP
通信接口部分用SSL
和 TLS
协议代替而已。
上面提到的 加密 + 认证 + 完整性保护 等 都是 SSL
协议的功能。
通常,HTTP
直接和 TCP
通信。当使用 SSL
时,则演变成先和 SSL
通信,再由 SSL
和 TCP
通信了。
SSL
是独立于 HTTP
的协议,所以不光是 HTTP
协议,其他运行在应用层的 SMTP
和Telnet
等协议均可配合 SSL
协议使用。可以说 SSL
是当今世界上应用最为广泛的网络安全技术。
SSL
很好的解决了上述 HTTP 使用中的风险:
在对 SSL
进行讲解之前,我们先来了解一下加密方法。
近代的加密方法中加密算法是公开的,而密钥却是保密的。通过这种方式得以保持加密方法的安全性。
加密和解密都会用到密钥。没有密钥就无法对密码解密。
也就是说只要有密钥任何人都能解密,如果密钥被攻击者获得,那加密也就失去了意义。
加密方式按照密钥分为两类。
HTTPS
采用的是对称加密和非对称加密结合的混合加密机制 :
采用「混合加密」的方式的原因:
所以应充分利用两者各自的优势,将多种方法组合起来用于通信。
传送消息采用对称加密机制,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
为了保证传输的内容不被篡改,我们需要对内容计算出一个哈希值,然后同内容一起传输给对方。
对方收到后,先是对内容也计算出一个哈希值。然后跟发送方发送的哈希值做一个比较。
如果哈希值相同,说明内容没有被篡改,否则就可以判断出内容被篡改了。
摘要算法 正是计算机将传输内容计算出哈希值的方法。
摘要算法计算出来的哈希值是唯一的,且无法通过哈希值推导出内容。
通过哈希算法可以确保内容不会被篡改,但是并不能保证「内容 + 哈希值」不会被中间人替换,因为这里缺少对客户端收到的消息是否来源于服务端的证明。
也就是说 如果在传输过程中 中间人 将内容 + 哈希值全部拦截并将其全部修改,这样客户端计算出来的哈希值即便是比对正确,信息也是错的。因为哈希值本身就已经被篡改了。
中间人攻击
是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。
在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。中间人攻击是一个(缺乏)相互认证的攻击。
大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。
例如,SSL协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信 任的数字证书认证机构颁发,并且能执行双向身份认证。
那为了避免这种情况,计算机里会用数字签名算法来解决。
用数字签名算法对内容的哈希值加密,这样中间人就无法修改哈希值了。
服务端可以向证书颁发机构CA申请证书,以避免中间人攻击(防止证书被篡改)。证书包含三部分内容:证书内容、证书签名算法和签名,签名是为了验证身份。
服务端把证书传输给浏览器,浏览器从证书里取公钥。证书可以证明该公钥对应本网站。
数字签名的制作过程:
浏览器验证过程:
SSL/TLS 协议基本流程:
前两步也就是 SSL/TLS 的建立过程,也就是 TLS 握手阶段。
SSL/TLS 协议建立的详细流程:
首先,由客户端向服务器发起加密通信请求,也就是 ClientHello
请求
在这一步,客户端主要向服务器发送以下信息:
(1)客户端支持的 SSL/TLS 协议版本,如 TLS 1.2 版本。
(2)客户端生产的随机数(Client Random
),后面用于生成「会话秘钥」条件之一。
(3)客户端支持的密码套件列表,如 RSA 加密算法。
服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello
。服务器回应的内容有如下内容:
(1)确认 SSL/ TLS 协议版本,如果浏览器不支持,则关闭加密通信。
(2)服务器生产的随机数(Server Random
),也是后面用于生产「会话秘钥」条件之一。
(3)确认的密码套件列表,如 RSA 加密算法。
(4)服务器的数字证书。
3.客户端回应
客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。
如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:
(1)一个随机数(pre-master key
)。该随机数会被服务器公钥加密。
(2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
(3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。
服务器收到客户端的第三个随机数(pre-master key
)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。
然后,向客户端发送最后的信息:
(1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。
(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。
至此,整个 SSL/TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容。
HTTP
的端口号是 80,HTTPS
的端口号是 443。HTTP
连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。
HTTPS
在 TCP
三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。HTTP
是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS
则解决 HTTP
不安全的缺陷,在TCP
和 HTTP
网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。HTTPS
协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。既然 HTTPS 那么安全可靠,那为何所有的 Web 网站不一直使用 HTTPS ?
因为 与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源。
如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。
所以 HTTPS 比 HTTP 要慢 2 到 100 倍 。
SSL
的慢分两种。
一种是指通信慢。另一种是指由于大量消耗 CPU 及内存等资源,导致处理速度变慢。
针对速度变慢这一问题,并没有根本性的解决方案,我们会使用 SSL
加速器这种(专用服务器)硬件来改善该问题。该硬件为 SSL
通信专用硬件,相对软件来讲,能够提高数倍 SSL
的计算速度。仅在 SSL
处理时发挥 SSL
加速器的功效,以分担负载。
ok以上就是对 HTTS 为什么更安全? 的全部讲解啦,很感谢你能看到这儿。如果有遗漏、错误或者有更加通俗易懂的讲解,欢迎小伙伴私信我,我后期再补充完善。
《图解HTTP》
https://www.xiaolincoding.com