宝哥软件园

HTTP与HTTPS握手的那些事

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

先决条件

说起这两次握手,有些事情需要提前说明。

HTTP和TCP/IP有什么区别?

TPC/IP协议是传输层协议,主要解决如何在网络中传输数据,而HTTP是应用层协议,主要解决如何封装数据。WEB使用HTTP协议作为应用层协议封装HTTP文本信息,然后使用TCP/IP作为传输层协议发送到网络。

下图试图显示不同的TCP/IP和其他协议在原始OSI(开放系统互连)模型中的位置:

PS:表格来源于网上数据

什么是CA证书?

CA(Certificate Authority)是负责管理和颁发证书的第三方权威机构,受到各行业和公众的信任和认可。

CA证书是CA颁发的证书,可以用来验证网站是否可信(对于HTTPS来说)、文件是否可信(是否被篡改)等。它也可以用一个证书来证明另一个证书是可信的,顶级证书称为根证书。除了根证书(证明自己是可靠的)之外,其他证书都要依靠更高级别的证书来证明自己。

HTTP三次握手

超文本传输协议是互联网上使用最广泛的网络协议。因为信息是以明文传输的,所以被认为是不安全的。至于HTTP的三次握手,其实是用三次TCP握手来确认一个HTTP连接的建立。

如下图所示,SYN(同步)是TCP/IP建立连接时使用的握手信号、序列号和确认号。当三个箭头指向时,表示三次握手,完成三次握手,客户端和服务器开始传输数据。

PS:图片来源于网络资料

第一次握手:客户端向服务器发送syn包(syn=j),进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包时,必须确认客户的SYN(ack=j 1)并发送SYN包(syn=k),即SYN ACK包。此时服务器进入SYN_RECV状态;

三次握手:客户端从服务器接收SYN+ACK包,并向服务器发送确认包ACK(ack=k 1)。发送此数据包后,客户端和服务器进入建立状态,并完成三次握手。

HTTPS握手过程

HTTPS在HTTP中加入了SSL协议,SSL依靠证书来验证服务器的身份,加密浏览器和服务器之间的通信。如何加密、解密和验证,见下图,这叫握手。

附言:以下描述摘自:http://zhuqil.cnblogs.com

1.客户端发起HTTPS请求

2.服务器配置

使用HTTPS协议的服务器必须有一套数字证书,可以是自制的,也可以是CA证书。不同的是自己颁发的证书需要经过客户端验证后才能继续访问,而使用CA证书时不会弹出提示页面。这组证书实际上是一对公钥和私钥。公钥为别人加密,私钥为自己解密。

3.转移证书

这个证书其实是一个公钥,但是里面包含了很多信息,比如证书的颁发机构,过期时间等等。

4.客户端解析证书

这部分工作由客户的TLS完成。首先,它将验证公钥是否有效,如颁发机构、过期时间等。如果发现异常,会弹出警告框,表示证书有问题。如果证书没有问题,就会生成一个随机值,然后用证书对随机值进行加密。

5.传输加密信息

这部分传输由证书加密的随机值,这样服务器就可以得到这个随机值,客户端和服务器之间的通信也可以用这个随机值进行加密和解密。

6.服务段的解密信息

服务器用私钥解密后,得到客户端发送的随机值(私钥),然后用这个值对称加密内容。对称加密是指通过一定的算法将信息和私钥混合在一起,这样除非知道私钥,否则无法获取内容,客户端和服务器都知道私钥,所以只要加密算法足够强硬,私钥足够复杂,数据就会足够安全。

7.加密信息的传输

这部分信息由服务段的私钥加密,可以在客户端恢复。

8.客户端解密该信息

客户端使用之前生成的私钥解密来自服务段的信息,然后获得解密的内容。

在PS:的整个握手过程中,即使第三方监听了数据,也没有什么可做的。

摘要

为什么HTTPS是安全的?

HTTPS握手第四步,如果网站的证书不可信,会显示如下确认界面,确认网站的真实性。此外,在第六步和第八步中,使用客户端的私钥进行加密和解密,以确保数据传输的安全性。

HTTPS和HTTP的区别

1.https协议需要从ca申请证书或自制证书。

2.http信息以明文形式传输,而https通过ssl加密,具有安全性。

3.http直接用TCP传输数据,而https通过一层SSL(OSI表示层),使用不同的端口。前者是80(需要国内备案),后者是443。

4.http连接简单且无状态;HttpS协议是由SSL HTTP协议构建的网络协议,可以进行加密传输和认证,比HTTP协议更安全。

请注意,https加密位于传输层

当https消息被打包成tcp消息时,加密过程就完成了,https的头字段和正文字段都将被加密。

当使用tcp层工具(如tcpdump或wireshark)捕获数据包时,会获得加密的内容。如果用应用层抓包,用Charels(Mac),Fildder(Windows)抓包,那就是明文。

PS: HTTPS本身就是为了网络传输的安全。

例如,用wireshark抓取一个包:

Http,您可以看到捕获是明文:

Https,您可以看到捕获的是密文:

附录

HTTPS常用的加密和哈希算法如下:

非对称加密算法:RSA、DSA/DSS

对称加密算法:AES,RC4,3DES

哈希算法:MD5,SHA1,SHA256

更多资讯
游戏推荐
更多+