https协议详析
当我们使用浏览器时可能会发现我们输入的网站有以http和以https开头的,它们的区别在于哪里呢?实际上,可以说https是http的升级版,是对其安全性的加强。
浏览器的一般工作流程
- 当用户输入要访问的URL后,浏览器会根据URL解析出其域名
- 通过DNS服务器查询出域名映射的IP地址
- 根据查询到的IP地址与web服务器建立通讯
上述过程可以抽象为下图
TCP/IP协议
http协议是构建在TCP/IP协议的基础上的,所以我们有必要了解Tcp/Ip相关的知识。
TCP/IP协议的分层模型
TCP/IP协议是由四层协议组成的系统,这四层分别为:应用层、传输层、网络层、链路层,如下图所示
应用层
应用层是我们编写的应用程序,它决定了向用户提供的应用服务。应用层可通过系统调用与传输层通讯。
处于应用层的协议非常多,比如:FTP(File Transfer Protocol,文件传输协议)、DNS(Domain Name System,域名系统)以及HTTP(HyperText Transfer Protocol,超文本传输协议)等。
传输层
传输层通过系统调用向应用层提供两台计算机之间的数据传输功能。
在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol,用户数据协议)。其中TCP在数据传输的安全性上高于UDP,但是其传输速度比较慢,所以一般快速下载软件都是用UDP,比如迅雷。
网络层
网络层用来处理网络上流动的数据包,归顶数据包的传输路径。
链路层
链路层是用来处理连接网络的硬件部分,包括操作系统、硬件设备驱动、NIC(Network Interface Card,网络适配器)以及光纤等硬件。
TCP协议
TCP协议是全双工的字节流传输,具有可靠性高的特点,为了确保其可靠性,TCP协议采用了”三次握手“的策略,如下图
在图中,我们可以看到:
- 首先客户端会向服务器发送一个带有SYN标志的连接请求
- 服务器接收到请求会作出应答,如果能接受连接,这服务器发送ACK进行确认,并且还会发送自己的SYN请求
- 客户端接受到SYN和ACK后,在向服务器发送ACK确认接受连接
- 三次握手完毕后会在客户端和服务器之间建立双向通信
- 为了维持TCP协议,在数据传输的过程中,接收端在接收端数据后都要给发送端发送ACK进行确认。若发送端在一定时间内没有接受到ACK确认,则会重发丢失的数据包
HTTP协议
简介
HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP基于TCP/IP通信协议来传递数据。
HTTP基于客户端/服务端(C/S)架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
特点
(1)HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
(2)HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
(3)HTTP是无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP协议的不足
- HTTP协议采用明文通讯,内容很有可能被窃听
- 无法验证对方身份,任何第三方可以通过伪装与服务器通讯
- 无法确定数据的可靠性,在传输中可能会被篡改
HTTPs协议
为了解决HTTP存在的问题,HTTPs应运而生,HTTPs采用SSL/TLS协议对传输的数据进行加密,保证了传输不被窃听;同时通过CA(由第三方权威机构颁发)证书验证通信双方的身份。
有关CA证书
CA证书是公司向权威机构申请,由权威机构颁发的。CA证书会被安装到服务器上,其中内容包括:
- 持有者姓名
- 发证机关
- 有效日期
- 证件持有人的公钥
- 扩展信息
- 发证机关对该证书的数字签名(=前5点信息的MD5摘要,然后用CA的私钥加密)
HTTPs的通信原理
客户端信任发证机关的证书,一般用户不需要操作。因为CA(权威)[下面简称为CAA]证书存储在浏览器中,而浏览器一般自动信任了大多数的权威机构证书。
在请求建立的过程中,首先客户端会向服务器发送一次请求,服务器向客户端返回一个CA(公司服务器)证书[后简称CAS]
- 客户端根据得到的CAS证书读得发证机关的信息,找到内置的对于机关的CAA证书,从证书中找到机关的加密公钥,用公钥(解密钥)对得到的CAS证书的第六点信息进行解密,如果解得的信息与CAS证书前五点摘要的MD5相同,则说明服务器的CAS证书确为该机构颁布的,进而证明了服务器的身份
- 客户端再用CAS中得到的服务器的公钥(加密钥)加密一个信息比如“123”发送给服务器,服务器则根据其持有的私钥(解密钥)对信息进行解密,然后服务器把解密结果返回给客户端,若解密得到的信息与发送信息一致,则可证明该服务器就是客户端要访问的服务器。这样可防止因域名写错而造成的错误访问。
- 然后客户端会向服务器发送一条信息用以约定通信过程中的对称加密钥,然后即可在双方之间建立通信,以后的通信中发送端会用该对称加密钥对传输数据进行加密,而接收端也用该对称秘钥进行解密。这样就可以防止信息被窃听。
通信流程图如下