从计算机说起
计算机最开始其实是用于高速计算的机器,慢慢的后来才出现了多媒体功能。
互联网
一台计算机能做的事情其实很有限,互联网是将不同功能的计算机连接起来实现资源共享的系统。
服务器&终端:服务器、手机、PC其实都属于计算机的一种,而一般来说,个人PC和手机的处理能力远远不如一个服务器集群的,所以说服务器和这些终端存在大量数据交互,这个数据交互就是依靠互联网。
TCP
互联网好啊,互联网能把所有的“计算机”都连接在一起,那么,在如此大量的信息交互中,传输数据的目标性、完整性和安全性怎么保证呢?
Transmission Control Protocol
,简称TCP,中文译名:传输控制协议。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP传输是由专门的TCP传输实体负责的,这个实体,可能是一个类,也可能是一个工具库,实体主要管理TCP和IP层之间的接口。
TCP/IP:
TCP将需要传输的数据分段,然后通过IP层(发送方)发送和(接收方)接收,IP层是不会在乎数据传输的顺序和完整性的,所以TCP还需要保证接收数据的完整性和顺序。
那么,TCP是如何工作的呢?
建立连接——三次握手
- 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
- 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
- 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
断开连接——四次挥手
- 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
- 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。 - 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
- 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
HTTP
HTTP,是Hyper Text Transfer Protocol
的缩写,翻译过来是超文本传输协议,它建立在TCP协议之上,最初出现的时候就是解决网页内容传输问题的,HTTP在连接成功的TCP通道中传输数据包。
特点
- 一次性:每次HTTP请求是即时连接并且在单次请求、响应完成之后就关闭的
- 单向性:只能是请求方主动向接收方发出请求并连接的(这个也是TCP的特点)
请求方式
HTTP规定了一些请求方式,使用不同请求做不同的事。
- GET,请求指定的页面信息,并返回实体主体。
- HEAD,类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
- POST,向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
- PUT,从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE,请求服务器删除指定的页面。
6.CONNECT,HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 - OPTIONS,允许客户端查看服务器的性能。
- TRACE,回显服务器收到的请求,主要用于测试或诊断。
- PATCH,是对 PUT 方法的补充,用来对已知资源进行局部更新 。
请求状态
HTTP规定了一系列code,表示每次HTTP请求的响应状态。
1xx 信息,服务器收到请求,需要请求者继续执行操作
2xx 成功,操作被成功接收并处理
3xx 重定向,需要进一步的操作以完成请求
4xx 客户端错误,请求包含语法错误或无法完成请求
5xx 服务器错误,服务器在处理请求的过程中发生了错误
HTTPS
终于进入重点了...
HTTP请求基于TCP,内容都是明文传输,信息没有加密,如果使用HTTP传输敏感数据,那这些敏感数据很容易被截获盗取。所以Netscape 公司制定了HTTPS协议,将内容进行加密传输。
HTTPS(Hypertext Transfer Protocol Secure) = HTTP+SSL/TLS,在HTTP和TCP之间加入一层安全协议层,就是HTTPS
SSL/TLS
SSL:Secure Sockets Layer,安全套接字层
TLS:Transport Layer Security,传输层安全
HTTP 原理
① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。
② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。
HTTPS 原理
① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器;
② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;
③ 客户端对服务器的证书进行验证,并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器;
④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC密钥;
⑤ 客户端将所有握手消息的 MAC 值发送给服务器;
⑥ 服务器将所有握手消息的 MAC 值发送给客户端。
优点
-
使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
-
HTTPS 协议是由 SSL+HTTP构建的可进行加密传输、身份认证的网络协议,要比 HTTP安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。
-
HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
缺点
-
相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗。
-
HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。
-
最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA根证书的情况下,中间人攻击一样可行。
-
成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,其投入成本已经下降到可接受程度。
注:以上内容基本来自百度百科,只是做了综述
网友评论