HTTP及其安全性
背景知识
1. TCP/IP协议族
以后可能会写TCP/IP的笔记,大概…
通常使用的网络是在TCP/IP协议族的基础上运行的,HTTP属于其子集。
1.1 TCP/IP分层管理
分层的优势
各层次接口调整好后,每个层次内部可以自由改动。
分层
- 应用层
应用层决定向用户提供应用服务时通信的活动。HTTP属于该层。 - 传输层
传输层提供处于网络连接中的两台计算机的数据传输,有两个性质不同的协议:TCP(Transmission control protocol)与UDP(User data protocol)。 - 网络层
网络层规定了到达用户计算机并传输数据的传输路线。 - 链路层
即硬件部分。
1.2 TCP/IP数据传输流
客户端<->层<->服务器
发送端传输数据时,每经过一层必定被打上一个该层所属的首部信息,反之,接收端接收数据时,每经过一层必定会把对应的首部消去。这种方法称为封装。
1.3 与HTTP关系密切的协议:IP, TCP与DNS
IP(Internet protoc)
IP协议的作用是传送数据包,确保传送两个最重要的条件是IP地址和MAC地址(Media access control address):
- IP地址指明节点被分配的地址,可以变换。
- MAC地址是网卡所属的固定地址,一般不会更改。
IP间通信时,利用下一站中转设备的MAC地址搜索下一个中转目标,通过ARP协议(Address resolution protocol),根据对方IP地址反查MAC地址。
网络设备在到达中转目标的过程中,只能很粗略地获悉传输路线。这种机制称为路由选择(Routing)。换言之,不可能掌握互联网中的细节。
TCP
TCP协议的作用是提供可靠的字节流服务。
字节流服务(Byte stream protocol):将大块数据分成以报文段(Segment)为单位的数据包进行管理,TCP协议可以确定数据是否到达。
三次握手(three-way handshaking)策略:使用带TCP的标志(flag)————SYN(synchronize)与ACK(acknowledgement)进行传输————发送端发送带SYN的数据包,接收端收到后回传带有SYN/ACK标志的数据包,最后发送端回传带ACK标志的数据包。
DNS
DNS服务提供从域名到IP的解析服务:通过域名查找IP地址,或从IP地址反查域名。
2. URI与URL
(属于TCP/IP族,但还是分开了…)
URI(Uniform resource identifier)
URI用字符串标识某一互联网资源。
URL
表示资源的地点,是URI的子集。
URI的格式
- 绝对URI:涵盖全部必要信息
- 绝对URL
- 相对URL
HTTP基础
HTTP用于客户端和服务器之间的通信,HTTP协议能够明确区分客户端与服务器。
请求和响应
HTTP协议规定,请求从客户端发出,服务器响应请求————通信从客户端开始建立。
HTTP是一种无状态(stateless)协议,不对请求和响应之间的通信状态进行保存
如需保存状态,需要cookie技术。
Cookie状态管理
Cookie技术通过在请求/响应报文中写入Cookie信息控制客户端状态。
过程:Cookie根据服务器发送的响应报文内的Set-Cookie首部字段信息通知客户端保存Cookie,下次客户端再次发送请求时会自动加入Cookie信息。服务端收到客户端发来的Cookie后,会检查是哪个客户端的记录,接着对比服务器记录,得到之前的状态信息。
HTTP1.1新特性
恒久连接(Persistent connections)
HTTP1.1中所有连接默认为恒久连接,即任意一方未提出断开连接时保持TCP的连接状态。
这样做减少了服务器开销。
管线化(pipelining)
同时并行发送多个请求,不必等待响应。
HTTP报文内的信息
报文是HTTP通信基本单位,由8位组字节流组成。
HTTP报文的结构
- 报文首部(请求/状态行,请求/响应首部字段,通用首部字段,实体首部字段)
- 空行;
- 主体。
实体由实体首部和主体组成,作为请求和响应的补充项。
提升传输效率
- 内容编码压缩传输;
- 分块传输编码;
- 范围请求。
HTTP的安全漏洞
- 窃听;
- 伪装;
- 篡改。
(安全经典三漏洞…)
HTTP Secure
HTTPS就是被SSL(secure socket layer)/TLS协议代替通信接口部分的HTTP。
HTTPS=HTTP+加密+认证+完整性保护。
通信加密
- SSL(secure socket layer)
是独立的协议,其他运行在应用层的协议都可以配合SSL使用。公开密钥加密:在这种方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。
共享密钥加密:共享密钥加密是加密和解密都是用相同密钥的一种加密方式,这种算法也被称为“对称加密”
证书可以验证密钥正确性。
浏览器提示你证书不正确/已过期时发生了什么?
浏览器提示证书不正确或已过期时,实际上发生了以下情况:
浏览器向服务器发起HTTPS请求,服务器会返回自己的SSL证书。
浏览器会对服务器返回的SSL证书进行验证,验证证书的颁发机构、证书的有效期、证书中的主题等等,以确保证书的真实性和有效性。
如果证书验证失败,浏览器会弹出提示框,告诉用户证书不正确或已过期,并提示用户是否继续访问该网站。如果用户选择继续访问,浏览器会继续建立HTTPS连接,但会在地址栏中显示警告信息,提醒用户存在风险。
SSL的速度问题:
没有根本的解决方案,只能使用SSL加速器(专用服务器)改善问题。
- TLS(transport layer security)
验证身份
使用SSL可以验明通信方,使用一种叫证书的手段。
证书由第三方机构颁发。
验证完整性
遭到攻击者拦截并篡改内容的攻击:中间人攻击。
防止篡改
使用散列值校验方法:MD5,SHA-1。
提供下载服务的网站也会提供PGP(完美隐私)创建的数字签名。
都需要用户亲自验证,浏览器无法自动检查。