Http通信
#1 总览
#2 基本概念
#2.1 Http
HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。
- HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。
- HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
#2.1.1 不足
HTTP是一个优秀的通信协议,不过事物皆具有双面性,该协议也是有不足之处,大概有以下几点:
- 使用明文传输,可能会被窃取不安全
- 不验证通信方身份
- 无法证明报文的完整性,证明不了报文是否被修改
#2.1.2 HTTP不具备加密功能
HTTP协议本身是没有加密功能,所以无法对请求和响应等内容加密。HTTP报文均采用明文形式,数据包在网络间传输很容易就被人窃取,如使用抓包工具(Wireshark)等。在对数据包进行抓取后进行分析,由于报文是以明文形式传输,如果内容是关于如个人信息等重要隐私则可能会被他人获取后所利用,造成损失。
#2.1.3 对内容进行加密
对内容加密是一种保护信息的好方法,HTTP是没有加密机制的,所以需要借助第三方来帮助实现加密。对内容加密的方式有很多如:
- SHA安全散列算法
- MD5信息-摘要算法
- BASE64(BASE64Encoder、BASE64Decoder类)
- RSA非对称加密算法
- DES等
#2.1.4 只对内容进行加密的不足之处
- 对于内容的加密并不能完全地保证信息的安全,因为即使对内容进行加密但数据包还是可以被窃取的,并且加密内容依然很有可能被解密出来。
- HTTP协议通信中请求和响应是不会对通信方进行确认的,所以可能会遭遇身份伪装。如发送的服务器是否就是真的目标主机、响应是否返回到真实发出请求的客户端等。
- 加密之后的报文虽然安全性提高了,但是还是证明不了报文内容是否被修改过。
#2.2 HTTPS
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
解析:从最初HTTP与TCP直接通信转变为HTTP先与SSL通信,之后SSL再与TCP通信。可以理解为HTTP加多了层SSL协议外套就变为了HTTPS。
下面,通过一条公式来表达HTTPS:HTTP + 加密 + 认证 + 完整性保护 = HTTPS
- HTTPS 默认工作在 TCP 协议443端口
- TCP 三次同步握手
- 客户端验证服务器数字证书
- DH 算法协商对称加密算法的密钥、hash 算法的密钥
- SSL 安全加密隧道协商完成
- 网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
#2.2.1 HTTPS是如何进行通信的?
概述:HTTPS通信过程结合了对称加密和非对称加密两种方法。HTTPS服务端在连接建立SSL通信时先会将自身的公钥发送给客户端。客户端拿到公钥后通过非对称加密与服务端协商数据传输通道的对称加密密钥。一旦双方协商出会话密钥,则后续的数据通讯就会一直使用基于该会话密钥的对称加密算法了。
#2.2.2 具体流程:
- 客户端发送报文开始SSL通信。
- 服务端可以进行SSL连接时就会发送应答报文给客户端。
- 接下来服务端发送Certificate报文(包含公开密钥证书)给客户端。
- 最后服务端发送通知报文通知客户端。
- 客户端先生成Pre-master secret随机密码,并以包含Pre-master secret且使用公钥加密的报文响应服务端。
- 客户端继续发送报文提示服务器说接下来的所有通信都采用Pre-master secret密钥加密。
- 客户端发送Finsh报文(该报文包含连接至今所有的整体校验值)
- 服务器也重复6 7步骤发送同样的报文,当Finsh报文交换结束后SSL连接算是建立完成。
- 接下来就是进行HTTP请求了,同时通信会受到SSL的保护。
#2.2.3 不足
- HTTPS比HTTP通信慢
- 导致客户端和服务器负载增强
- 购买证书需要开销