安全 - HTTPS - b
1.HTTPS
1.1 HTTP缺点
1.1.1 通信使用明文,内容容易被窃听
-
HTTP 本身不具有加密能力,无法对通信的请求或响应加密
-
TCP/IP 是可能被窃听的网络
- 依照TCP/IP协议族的工作机制分析,通信内容在所有的通信线路都可能被窃听
- 即使是加密过的通信,也会被窃取到通信内容(加密过的内容)
-
窃听手段:获取互联网上的流动数据(帧)
-
加密:
-
通信加密:
使用SSL(Secure Socket Layer,安全套接层)或TLS(TranSport Layer Security)
与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP voer SSL
- 用SSL建立安全通信线路后进行HTTP通信
-
内容加密:
内容仍有被篡改的风险
- 对通信内容本身加密后再发送请求(前提要求客户端和服务端同时具备加密和解密机制)
-
1.1.2 不验证通信双方的身份,可能遭遇伪装
- 任何人可发起请求
- 无法确定返回的是否是源服务器真正返回的内容
- 无法确定客户端是否是真正接收响应的客户端
- 无法确定通信对象是否具有权限
- 无法确定请求的发送者,发送地
- 服务器容易受到DoS(Denial of Service, 拒绝服务攻击)
- 应对策略:
- 查明对方的证书
- SSL提供了称为证书的机制
- 证书由可信任的第三方机构颁发,证明服务端客户端真实存在
- 查明对方的证书
1.1.3 无法证明报文的完整性,报文可能已被篡改
-
接收到的内容可能有误
MITM:中间人攻击,请求或响应传输过程中,遭到攻击者拦截并篡改内容的攻击
- 无法证明通信报文的完整性
- 传输过程中可能受到MITM(Man-in-the-Middle attack)攻击
-
应对策略:
- 数字签名:
- MD5
- SHA-1
- PGP(Pretty Good Privacy, 完美隐私)
- 数字签名:
1.2 HTTPS (HTTP + 加密 + 认证 + 完整性保护)
- 身披SSL外壳的HTTP:通信接口部分用SSL和TLS
- 通信过程:(原)HTTP直接和TCP通信 =>(现)先和SSL通信,再由SSL和TCP通信
- SSL 采用公开加密算法(Public-key cryptography)
1.2.1 共享秘钥加密
- 共享秘钥加密:加密解密使用同一个秘钥
- 发送时需要将秘钥给对方
1.2.2 公开秘钥加密
- 使用非对称秘钥(私有秘钥(private key)+ 公开秘钥(public key))
1.2.3 混合加密
-
HTTPS加密方式:共享秘钥+公开秘钥
-
证明公开秘钥正确性的证书
-
证书由可信赖的第三方机构颁发
-
证明组织真实性的证书
- EV SSL(Extended Validation SSL Certificate)
-
确认客户端的客户端证书
- 获取了安装有客户端证书的终端使用权限,拥有了客户端证书的的使用权限
-
认证机构的正确性
- 若认证机构颁发的证书本身出了问题,那么使用证书的安全性便有待考究
- 事故:2011年7月,荷兰DigiNotar遭到黑客入侵,颁发了伪造证书
-
自签名证书
并不能消除服务器被伪装的风险,加可信任的第三方认证相比于此可信度更高
- 自己构件的认证机构颁发的证书
- 方法:使用OpenSSL开源程序搭建自己的认证机构
1.2.4 HTTPS 通信流程
- 通信流程图:
- 加密l流程
1.2.5 加入SSL后变慢
-
和使用HTTP相比,网络负载会慢到2-100倍
-
类别:
- 通信慢:连接时需要先与SSL通信
- 处理速度慢:大量消耗内存,进行加密运算等操作
-
硬件加速服务器提高SSL的计算速度
2.确认认用户访问身份
2.1 概述
- 认证(一般核对一下信息):
- 密码:本人可知字符串信息
- 动态密码:限本人持有的设备内显示的一次性密码
- 数字证书:限本人(终端)持有的信息
- 生物认证:指纹和虹膜等生理信息
- IC卡等:限本人持有的信息
- HTTP/1.1认证方式
- BASIC认证(基本认证)
- DIGEST认证(摘要认证)
- SSL客户端认证
- FormBase认证(基于表单认证)
2.2 BASIC 认证
- 流程:
- 1.请求资源需要认证,服务端=>401 Authorizatin Required
- 响应带有WWW-Authenticate字段
- 字段内包含认证的方式(BASIC)及Request-URI安全域字符串
- 2.客户端—>带用户密码的字符串
- 字符串内容:经过Base64编码处理的用户名+:+用户密码
- 3.服务端响应
- 认证通过=>含Request-URI的资源响应
- 1.请求资源需要认证,服务端=>401 Authorizatin Required
- 缺点:
- 破译可能性极高
- 使用上不够灵活
2.3 DIGEST认证
- 流程:
- 1.请求资源需要认证,服务端=>401 Authorizatin Required
- 响应带有WWW-Authenticate字段
- 字段内容:质询所需质询码(随机生成)
- 首部字段必须包含:readlm, nonce(随机字符串)
- 2.客户端—>认证字段
- 首部字段包含内容:
- username
- realm(服务器上一步的回应值)
- nonce(服务器上一步的回应值)
- uri
- response
- 首部字段包含内容:
- 3.服务端响应
- 认证通过=>含Request-URI的资源响应,首部字段Authorization-Info写入认证成功的信息
- 1.请求资源需要认证,服务端=>401 Authorizatin Required
2.4 SSL 客户端认证
- 流程:
- 1.服务端接到对需认证自愿的请求=>Certificate Request,要求客户端提供证书
- 2.客户端—>证书以Client Certificate报文方式发送给服务端
- 3.服务器验证哭护短证书验证通过后领取证书内客户端的公开秘钥,并开始HTTPS加密通信
- 双因素认证(提供基于表单的认证和证书的组合):
- 表单信息
- 证书
2.5 Cookie
- 使用Cookie管理Session,实现对用户状态的记录
3.HTTP功能追加协议
3.1 SPDY消除HTTP瓶颈
SPDY - The Chromium Projects缩短Web加载性能50%
3.1.1 HTTP瓶颈
- 一条连接上一条请求
- 请求由客户端开始
- 请求首部未经压缩便发送
- 发送冗长的首部
- 任意数据压缩格式
3.1.2 Ajax
- 使用JavaScript和DOM操作达到局部加载页面的通信手段
- 效果:未解决HTTP瓶颈
3.1.3 Comet
- 服务器端内容更新,直接给客户端返回响应,延迟应答,模拟实现向服务器端向客户端推送的功能
3.1.4 SPDY
3.1.4.1 相关信息
- 未完全改写HTTP协议TCP/IP 与 传输层间添加 会话层
- SPDY规定通信使用SSL
- 仍采用HTTP建立通信连接
4.1.4.2 添加给HTTP的功能
- 多路复用流
- 单一TCP处理多个HTTP
- 赋予请求优先级
- 并发处理请求,可通过添加请求优先级控制贷款
- 压缩HTTP首部
- 压缩HTTP请求和响应首部
- 推送功能
- 指出服务器主动向客户端推送
- 服务器提示功能
- 主动提示客户端请求所需资源
3.1.4.3 应用
- 将单个IP的通路多路复用,单IP下有多个站点,改善效果有所下降
3.2 全双工通信WebSocket
- 一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后的所有通信依靠此专用协议
- 任意一方可直接向对方发送报文
- 支持推送
- 减少通行量
- 建立WebSocket:HTTP连接建立后完成一次握手
3.3 WebDAV管理文件
Web-based Distributed Authoring and Versioning
- 可对Web服务器上内容直接进行文件复制、编辑等操作的分布式文件系统
参考书籍:【日】上野宣.图解HTTP.北京.人民邮电出版社.2014