图解HTTP-上野宣
第1章 了解Web及网络基础
1,使用HTTP协议访问Web
2,HTTP的诞生
3,网络基础TCP/IP
4,与HTTP关系密切的协议:IP、TCP、和DNS
5,负责域名解析的DNS服务
6,各种协议与HTTP协议的关系
7,URI和URL
第2章 简单的HTTP协议
1,HTTP协议用于客户端和服务器端之间的通信
2,通过请求和响应的交换达成通信
3,HTTP是不保存状态的协议
4,请求URI定位资源
5,告知服务器意图的HTTP方法
6,使用方法下达命令
7,持久连接节省通信量
8,使用Cookie的状态管理
第3章 HTTP报文内的HTTP信息
1,HTTP报文
2,请求报文及响应报文的结构
3,编码提升传输速率
4,发送多种数据的多部分对象集合
5,获取部分内容的范围请求
6,内容协商返回最适合的内容
第4章 返回结果的HTTP状态码
1,状态码告知从服务器端返回的请求结果
2,2xx成功
3,3xx重定向
4,4xx客户端错误
5,5xx服务器错误
第5章 与HTTP协作的Web服务器
1,用单台虚拟主机实现多个域名
2,通信数据转发程序:代理、网关、隧道
3,保持资源的缓存
第6章 HTTP首部
1,HTTP报文首部
2,HTTP首部字段
3,HTTP/1.1通用首部字段
4,请求首部字段
5,响应首部字段
6,实体首部字段
7,为Cookie服务的首部字段
8,其他首部字段
第7章 确保Web安全的HTTPS
1,HTTP的全岛
2,HTTP+加密+认证+完整性保护=HTTPS
第8章 确认访问用户身份的认证
1,何为认证
2,BASIC认证
3,DIGEST认证
4,SSL客户端认证
5,基于表单认证
第9章 基于HTTP的功能追加协议
1,基于HTTP的协议
2,消除HTTP瓶颈的SPDY
3,使用浏览器进行全双工通信的WebSocket
4,期盼已久的HTTP/2.0
5,Web服务器管理文件的WebDAV
第10章 构建Web内容的技术
1,HTML
2,动态HTML
3,Web应用
4,数据发布的格式及语言
第11章 Web的攻击技术
1,针对Web的攻击技术
2,因输出值转义不完全引发的安全漏洞
3,因设置或设计上的缺陷引发的安全漏洞
4,因会话管理疏忽引发的安全漏洞
5,其他安全漏洞
网络基础TCP/IP
TCP/IP协议族各层的作用如下。
应用层:
应用层决定了向用户提供应用服务时通信的活动。
TCP/IP协议族内预存了各类通用的应用服务。比如,FTP(File Transfer Protocol,文件传输协议)和DNS(Domain Name System,域名系统)服务就是其中两类。
HTTP协议也处于该层。
传输层:
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。
网络层(又名网络互连层)
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
链路层(又名数据链路层,网络接口层)
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。
利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。
我们用HTTP举例来说明,首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。
接着,为了传输方便,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。
接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
这种把数据信息包装起来的做法称为封装(encapsulate)
HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一直新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。
通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。
在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。
SSL是独立于HTTP的协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。
SSL采用一种叫做公开密钥加密(Public-key-cryptography)的加密处理方式。
共享密钥加密
加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),也被叫做对称密钥加密。
公开密钥加密的方式很好地解决了共享密钥加密的困难。
公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。
使用公开密钥加密的方式,发生密文的一方使用对方的密钥进行加密处理,对方收到被加密的信息,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
另外,要想根据密文和公开密钥,恢复到信息原文是异常困难的,因为解密过程就是在对离散对数进行求值,这并非轻而易举能办到。退一步讲,如果能对一个非常大的整数做到快速因式分解,那么密码破解还是存在希望的。但目前的技术看不太现实。
HTTPS采用混合加密机制
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。
所以应充分利用两者各自的优势,将多种方法组合起来用于通信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式
HTTPS的安全通信机制
未来更好地理解HTTPS,我们来观察一个HTTPS的通信步骤
步骤1: 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
步骤2: 服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤3: 之后服务器发送Certificate报文。报文中包含公开密钥证书。
步骤4: 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
步骤5: SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。
步骤6: 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
步骤7: 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
步骤8: 服务器同样发送Change Cipher Spec报文。
步骤9: 服务器同样发送Finished报文。
步骤10: 服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。步骤11: 应用层协议通信,即发送HTTP响应。
步骤12: 最后由客户端断开连接。断开连接时,发送close_notify报文。上图做了一些省略,这步之后再发送TCP FIN报文来关闭与TCP的通信。
在以上流程中,应用层发送数据时会附加一种叫做MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整性。
下面是对整个流程的图解。图中说明了从仅使用服务器端的公开密钥证书(服务器证书)建立HTTPS通信的整个过程。