408计算机网络07-HTTP 与 HTTPs 的建立连接的过程

HTTP 与 HTTPs 的建立连接的过程

HTTP

HTTP(Hyper Text Transfer Protocol: 超文本传输协议) 是一种简单的请求 - 响应协议,被用于在 Web 浏览器和网站服务器之间传递消息。HTTP 使用 TCP(而不是 UDP)作为它的支撑运输层协议。其默认工作在 TCP 协议 80 端口,HTTP 客户机发起一个与服务器的 TCP 连接,一旦连接建立,浏览器和服务器进程就可以通过套接字接口访问 TCP。客户机从套接字接口发送 HTTP 请求报文和接收 HTTP 响应报文。类似地,服务器也是从套接字接口接收 HTTP 请求报文和发送 HTTP 响应报文。其通信内容以明文的方式发送,不通过任何方式的数据加密。当通信结束时,客户端与服务器关闭连接。

HTTPS

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的 HTTP 协议,在 HTTP 的基础上通过传输加密和身份认证的方式保证了传输过程的安全性。其工作流程如下:

① 客户端发起一个 HTTPS 请求,并连接到服务器的 443 端口,发送的信息主要包括自身所支持的算法列表和密钥长度等;

② 服务端将自身所支持的所有加密算法与客户端的算法列表进行对比并选择一种支持的加密算法,然后将它和其它密钥组件一同发送给客户端。

③ 服务器向客户端发送一个包含数字证书的报文,该数字证书中包含证书的颁发机构、过期时间、服务端的公钥等信息。

④ 最后服务端发送一个完成报文通知客户端 SSL 的第一阶段已经协商完成。

⑤ SSL 第一次协商完成后,客户端发送一个回应报文,报文中包含一个客户端生成的随机密码串,称为 pre_master_secre,并且该报文是经过证书中的公钥加密过的。

⑥ 紧接着客户端会发送一个报文提示服务端在此之后的报文是采用pre_master_secre 加密的。

⑦ 客户端向服务端发送一个 finish 报文,这次握手中包含第一次握手至今所有报文的整体校验值,最终协商是否完成取决于服务端能否成功解密。

⑧ 服务端同样发送与第 ⑥ 步中相同作用的报文,已让客户端进行确认,最后发送 finish 报文告诉客户端自己能够正确解密报文。

当服务端和客户端的 finish 报文交换完成之后,SSL 连接就算建立完成了,之后就进行和 HTTP 相同的通信过程,唯一不同的是在 HTTP 通信过程中并不是采用明文传输,而是采用对称加密的方式,其中对称密钥已经在 SSL 的建立过程中协商好了。

HTTP:默认用TCP协议的80端口(可以改),通信内容明文传输,不处理
HTTPS:

请求:443端口,支持算法,密钥长度
理解:两网友约定明天出去玩,玩什么呢?爬山,游泳,游乐园选一个吧
响应:选择一种,将其密钥组件一起发给客户端
理解:我们去游乐园吧
响应:数字证书
理解:为了证明我是个合法公民。给你看看我的身份证,身份证是XX*局发的,身份证号是XX,10年后过期
响应:协商完成
理解:OK,我同意去游乐园
生成随机密码串,并使用证书公钥加密
理解:为了互相证明我们是协商的网友,每个句尾加个“喵”
请求:尝试使用加密串加密
理解:我们试试,我是客户端喵
响应:发送finish结束
理解:我说完了你试试
响应:和客户端相同进行加密发送
理解:服务端喵
然后,SSL链接完成

上一篇:05-Java基础07~10


下一篇:JAVA寒假07