情不敢至深,恐大梦一场。 —— 夏吉尔硕
起步:
HTTP 协议会存在消息劫持和身份伪装等安全问题,而使用 HTTPS 则可以有效防止这些问题。
HTTP 的缺点
- 通信使用明文(不加密),内容有可能被窃听
- 不验证通信方身份,因此可能遭遇伪装。
- 无法证明报文完整,所以有可能被篡改
通信使用明文,可能被窃听
- 通信不加密
- 因为按 TCP/IP 协议族工作机制,通信内容在所有通信线路都可能被窥视。
- 通信加密
- 加密处理的通信也会被窥视通信内容,只是可能无法被破解报文信息含义。
注:互联网上的任何角落都存在通信内容被窃听的风险
通信加密
-
HTTP
协议本身没有加密机制,但可以与 SSL(Secure Socket Layer)组合使用 -
SSL 建立安全通信线路,然后进行 HTTP 通信
-
这种与 SSL 组合的 HTTP 被称之为 HTTPS(HTTP Secure,超文本传输安全协议)
验证通信方身份
-
HTTP
协议通信时,不会确认通信方 -
而服务器对请求者也是来者不拒,都会返回响应
-
不确认通信方则会存在以下隐患
- 有可能遭遇伪装的 web 服务器
- 有可能遭遇伪装的客户端
- 无法确定通信的对方是否具备访问权限
- 重点:因无意义请求也会接收,容易遭遇 DoS 攻击(拒绝服务攻击)
-
查明对方证书
- 以上可知用 HTTP 协议无法确定通信方
- 使用 SSL 可用于确定对方身份
- 证书有可信任第三方颁发,可证明客户端或服务端实际存在
无法确认报文完整性,则容易被篡改
- HTTP 协议无法证明通信的报文完整性,所以具有风险性
- 比如:发出请求,从某服务器接收到的网页文件,有可能是篡改过的
- 遭攻击者拦截并篡改内容的攻击称为中间人攻击
HTTP+ 加密 + 认证 + 完整性保护
- 把添加了加密及认证机制的 HTTP 称为 HTTPS
- 同时在浏览器访问中也改用 https://,并且带有锁 🔒 标记
- HTTPS 只是身披 SSL 外壳的 HTTP 而已
- 通常,HTTP 直接和 TCP 通信。
- 使用 SSL 时,变成先和 SSL 通信,再由 SSL 和 TCP 通信
- 采用 SSL 后,HTTP 就拥有了加密,证书,报文完整性保护功能
- SSL 是当今世界上应用最为广泛的网络安全技术。
公开密钥加密技术
- 公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。
- 如何应用
- 发送密文的一方,使用对方的公开密钥进行加密处理。
- 接收加密信息的乙方,再使用自己的私有密钥进行解密。
外界根据密文和公开密钥,恢复到信息原文是异常困难的,因为解密过程就是在对离散对数进行求值,这很难办到。
HTTPS 采用混合加密方式
-
HTTPS 采用共享密钥加密(对称密钥加密)+公开密钥加密(非对称密钥加密)
-
(公开密钥加密与共享密钥加密相比,其处理速度要慢)
-
公开密钥使用无法确认是货真价实的公开密钥
- 解决方案,使用数字证书认证机构和其他机关颁发的公开密钥证书。
-
HTTPS 要比 HTTP 慢
- HTTPS 进行加解密会消耗 CPU 和内容等硬件资源
- SSL 通信会消耗部分网络资源
为什么不一直使用 HTTPS?
- 使用 HTTPS 通信需购买证书(金钱花费)
- 加密通信会消耗更多 CPU 和内存资源
- 计算机会因 HTTPS 通信而减少能够处理请求的数量
- 因此,只有敏感数据才使用 HTTPS 加密通信,而且只针对部分内容,以节约资源
确认访问者身份——表单验证
Session 管理及 Cookie 应用
基于表单认证是通过服务器端的 Web 应用,将客户端发送过来 的用户 ID 和密码与之前登录过的信息做匹配来进行认证的
-
一般使用 Cookie 管理 Session,弥补 HTTP 协议中无状态管理功能
-
根据图上可知,操作步骤如下
步骤 1: 客户端把用户 ID 和密码等登录信息放入报文的实体部分,通常以 POST 方法使用 HTTPS通信来进行数据的发送。
步骤 2: 服务器会发放用以识别用户的 Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Session ID 绑定后记录在服务器端。
补充:客户端返回响应时,会在首部字段 Set-Cookie 内写入 SessionID(如 PHPSESSID=028a8c…)
步骤 3:
A:客户端接收到从服务器端发来的 Session ID 后,会将其作为Cookie 保存在本地。
B:下次向服务器发送请求时,浏览器会自动发送Cookie,所以 Session ID 也随之发送到服务器。
C:服务器端可通过验证接收到的 Session ID 识别用户和其认证状态。
总结:
HTTPS虽然各方面都优于HTTP,但出于资源占用影响效率和成本考虑,在实际中的应用并不完全是HTTPS,而是采用HTTP与HTTPS混合使用的方式