HTTP协议学习笔记十

安全HTTP

HTTP协议学习笔记十

在使用HTTP时,所有的请求与响应数据在发送到网络之前,都要进行加密。HTTPS在HTTP下面提供了一个传输

级的密码安全层,如上图,可以用SSL或者TLS。


对称**加密算法,就是加密和解密共享同一**,流行的比如:DES,Triple-DES,RC2和RC4。

用暴力尝试所有的**值称为枚举攻击

可用的**值的数量取决于**中的位数,比如,八位的**,就有256个可能的**值。

实际上,长**对密码安全有着非常重要的影响


公开**加密技术,使用两种非对称**,一个用来对主机报文编码,另一个用来对主机报文解码,

就是说,编码**是众所周知的,但是解码**只有接受端才有,分离开来,如图:

HTTP协议学习笔记十


数字签名通常是用非对称公开**技术产生的,因为只有作者才知道其私有**,如图:

HTTP协议学习笔记十

1.节点A将边长报文提取为定长的摘要。

2.节点A对摘要应用了一个“签名”函数,这个函数会将用户的私有**作为参数。因为只有用户才知道私有**。

3.一旦计算出签名,节点A就将其附加在报文的末尾,并将报文和签名都发送给B。

4.在接收端,节点B需要确定报文是节点A的,而且没有被篡改过,节点B就可以对签名进行检查。节点B接受经

私有**扰码的签名,并应用了使用公开**的反函数,如果拆包后的摘要与节点B自己摘要版本不匹配,要么

就是报文在传输过程中被篡改,要么就是发送端没有节点A的私有**(也就是说它不是节点A)


SSL是个二进制协议,与HTTP完全不同,其流量是承载在另一个端口上的,通常是433端口,如果SSL和HTTP

都从80端口到达,大部分WEB服务器会将二进制SSL流量理解为错误的HTTP并关闭连接,SSL与安全服务器

建立连接,如图:

HTTP协议学习笔记十


HTTP请求与HTTPS请求,如图:

HTTP协议学习笔记十


1.客户端首先打开一条道WEB服务器端口443的连接,一旦建立了TCP连接,客户端和服务器就会

初始化SSL安全层。

2.对加密参数进行沟通,并交换**,握手完成后,SSL初始化就完成了,客户端就可以将请求报

文发送给安全层了。

3.发送之前要对其先进行加密。


简单的HTTPS客户端C代码,参考《HTTP权威指南》第347页


客户端开始用服务器的公开**对发往服务器的数据进行加密,代理就不能读取HTTP首部了,如图:

HTTP协议学习笔记十

所以要使用HTTPS SSL隧道协议,所以首先客户端要告知代理,它想要连接的安全主机和接口,这在开始加密之前,

以明文形式告知,所以代理可以理解。

HTTP通过新的名为CONNECT的扩展方法来发送明文形式的端点信息,例:

CONNECT home.netscape.com:433 HTTP/1.0

User-agent: Mozilla/1.1N

在请求中的空行后,客户端会等待来自代理的响应。代理会对请求进行评估,确认是有效时。若一切正常,代理会

建立一条到目标服务器的连接,如果成功,向客户端响应一条200 Connection Established响应,例:

HTTP/1.0 200 Connection established

Proxy-agent: Netscape-proxy/1.1