一、HTTP和HTTPS介绍
1.什么是HTTP?
超文本传输协议(Hypertext Transfer Protocol),是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
1.1 HTTP/0.9
1991年,万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(IETF)制定了 HTTP 0.9 标准。因为当时互联网还在普及,该版本协议主要用来网络之间传输体积很小的HTML文件。
①.只有一个命令GET,对应到现在的GET请求和POST请求,这些叫做HTTP的命令或者方法
②.没有HEADER等描述数据的信息
③.服务器发送完毕,就关闭TCP链接。一个HTTP请求通过TCP连接发送,一个TCP连接可以发送多个HTTP请求(HTTP/0.9还不能,HTTP/1.1实现。HTTP/2有更大程度优化)
1.2 HTTP/1.0版本
1996年,HTTP/1.0 版本发布,在HTTP/0.9版本基础上进行了改进。
①.新增了post、put、header等命令。
②.增加了status code和header内容,通知浏览器服务器的处理结果。
③.支持多字符集支持、多部分发送、权限、缓存等,实现可以传输文字、传输图像、视频、二进制文件。
1.3 HTTP/1.1版本
这个版本是在HTTP/1.0的基础上增加了一些功能来优化网络连接的过程。
①.新增长连接:为了改进HTTP/1.0中连接无法复用,每次通信都需要建立一个TCP连接的问题,HTTP/1.1中增加了持久连接的方法。
②.请求头中增加了host字段。在一台物理服务器上可以存在多个虚拟主机,host可以用来表示当前的域名地址,从而使服务器可以根据不同的host值调用不同的虚拟主机。
③.在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
1.4 HTTP/2.0版本
①.多路复用:HTTP2.0使用了多路复用的技术,做到同一个TCP连接并发处理多个HTTP请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
②.头部压缩:HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了。(HPACK:它使用一份索引表来定义常用的 HTTP Header。把常用的 HTTP Header 存放在表里。请求的时候便只需要发送在表里的索引位置即可。)
③.服务端推送:在HTTP2.0里面有了”推送”的概念,也就是说服务器端可以主动向客户端发起一些数据传输。
④.区分请求的优先级:再发送请求的时候可以标上优先级,服务端在接收请求后,可以优先处理优先级高的请求。
⑤.二进制协议:相比于HTTP 1.x基于文本的解析,HTTP/2将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码,这些帧可以乱序发送,然后再根据每个帧头部的流标识符(Stream_id)重新封装。
⑥.流量控制:每个 http2 流都拥有自己的公示的流量窗口,它可以限制另一端发送数据。对于每个流来说,两端都必须告诉对方自己还有足够的空间来处理新的数据,而在该窗口被扩大前,另一端只被允许发送这么多数据。
1.5 HTTP/3.0版本
http3.0基于UDP实现,基于UDP实现了类似TCP的多路复用、传输可靠性等功能,称为QUIC协议。
2.什么是HTTPS?
HTTPS 的全称是 Hypertext Transfer Protocol Secure。《图解HTTP》这本书中曾提过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
二、SSL/TLS介绍
1.什么是SSL/TLS?
SSL(安全套接字层)是一种标准安全协议,用于在在线通信中建立Web服务器和浏览器之间的加密链接。
TLS (Transport Layer Security)是SSL协议(Secure Sockets Layer)的升级版。TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。
Netscape(网景通信公司)在1994年创建了SSL协议的原始规范,但是没有公开发布过。SSL 3.0协议获得互联网广泛认可和支持,因特网工程任务组(IETF)接手负责该协议,并将其重命名为传输层安全(TLS)协议。TSL1.0实质上就是SSL 3.0协议的适度改进版。
不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
· 窃听风险(eavesdropping):第三方可以获知通信信息。
· 篡改风险(tampering):第三方可以修改通信信息。
· 冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到
· 所有信息都是加密传播,第三方无法窃听。
· 具有校验机制,一旦被篡改,通信双方会立刻发现。
· 配备身份证书,防止身份被冒充。
2. 加密算法的历史
①简述
最早的加密算法主要用于军事,在古时候就有飞鸽传输,快马加书信的方式进行通讯,在传输的过程中如果被他人劫持,将信息内容替换,便很难对信息进行是否正确的判别。慢慢的,人们想出了一种方式,使用一种规则将文字打乱,再用同样的规则将文字复原,这便是加密解密的根源了。例如在密码学的原始的凯撒密码,据说其是凯撒在战争中与将军们交流的一种加密的方式,其原理十分的简单,就是让字母都具有统一的偏移量,使得原本正常的文字,在每个字母偏移后形成无法识别的文字。
②现代加密方式
1) 常见加密的种类
a. 哈希(hash)算法
b. 对称加密算法
c. 非对称加密算法
2) 哈希算法
哈希算法使用的是散列值法,通过一种对应的散列公式将key转换成hash值,也是一种较为优秀的地址存储方式,一般来说,这种算法加密是无法进行破解的,网上所谓的破解一般来说只有以下三种方式:时间解法,空间解法,彩虹表法。
具代表性的哈希加密:md5加密,sha加密
3) 对称加密算法
通过同一个密钥进行明文的加密和解密。当密钥泄露的时候,所有的密文都可以直接转化为明文,数据的机密性不可保持。
4) 非对称加密算法
非对称加密拥有一套匹配的公钥和私钥,明文可以使用公钥加密成密文,密文再用私钥进行解密成明文,也可以反过来,用私钥加密,公钥继续解密。但是非对称性加密缺点就是速度过慢。
③混合加密
混合加密方式是对称加密和非对称加密相结合。TLS就是使用混合加密方式来实现机密性。
三、中间者入侵
假如服务器端经由中间方向客户端发送公钥的时候,中间方没有将公钥发送给客户端,而是伪造了一对公钥,并将伪造的公钥发送给客户端,此时客户端用中间方伪造的公钥对自己正确的对称秘钥加密并由中间方发送给服务器端,而中间方将用自己伪造的公钥的私钥对其进行解密,得到正确的对称秘钥,并将得到的正确的对称秘钥用服务器端发过来的公钥进行加密发给服务器端,服务器再用正确的私钥进行解密,也得到正确的对称秘钥,此时客户端、服务器端和中间方三者都拥有一套正确的对称秘钥,可以对传送的数据进行加密,解密。
四、CA证书
服务器端会向CA申请认证书,此证书包含了CA及服务器端的一些信息,客户端校验拿到的公钥信息,中间方是伪造的是无法通过的,保证客户端拿到的公钥是服务器端的。
五、总结
相比HTTP 协议,HTTPS 协议增加了很多握手(HTTPS 的建立过程包括 7 次握手,除了 TCP 建立连接的三次握手,还包括 TLS 四次握手过程)、加密解密等流程,虽然过程很复杂,但其可以保证数据传输的安全。
网友评论