HTTPS协议

 

https协议概念

在学习https协议之间,我们首先要来看看http的缺点。

前面已经学习过http协议,我们在这里来看看http的不足。

  1. 通信使用明文,内容可能会被窃听。
  2. 不验证通信方的身份,因此有可能遭遇伪装。
  3. 无法验证报文的完整性,所以有可能已遭篡改。

这些问题不仅在http上出现,其他未加密的协议中也会存在这类问题。在http协议中有可能存在信息窃听或身份伪装等安全问题。使用https通信机制可以有效的防止这些问题。

https(超文本传输安全协议)是身披SSL外壳的http(超文本传输协议)。

https并非是应用层的一种新协议。只是http通信接口部分使用SSL(secure socket layer)和TLS(transport layer security)协议代替而已。通常,http直接和tcp通信。当使用SSL时,则演变成先和SSL通信,再由SSL和tcp通信了。简言之,所谓https,其实就是身披SSL协议这层外壳的http。

在采用SSL后,HTTP就拥有了HTTPS的加密,证书和完整性保护这些功能。SSL时独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP(电子邮件传输协议)和TELNET(远程登陆服务标准协议和方式)等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。

什么是SSL和TLS。

SSL协议一般指ssl。SSL(secure sockets layer安全套接字协议),及其继任者TLS(transport layer security 安全层传输协议)是为网络通信提供安全及数据完整性的一种安全协议。SSL和TLS在传输层与应用层之间对网络连接性进行加密。

https使用的端口是443,http使用的端口是80,进行通信。

以下是https工作流程图。

客户端需要使用https的url来访问web服务器,要求与web服务器建立SSL的连接,web服务器收到客户端的请求后,将网站包含有公钥的证书信息传送一份给客户端,客户端浏览器与web服务器开始协商SSL连接的安全等级,也就是信息加密等级。之后客户端浏览器根据双方同意的安全等级建立会话密钥,然后利用网站的公钥将会话密钥加密并传送给网站。之后web服务器利用自己的私钥来解密出会话密钥,最后web服务器利用会话密钥来加密与客户端之间的通信。

捕获https数据包 。

由于https是建立在tcp之前,这里使用wireshark捕获时,可以设置捕获筛选器为tcp。捕获下来的数据包,还是用着色功能筛选出来,筛选出来的数据包保存名字为https1。

打开https1。

这里可以看到首先开始的还是TCP三次握手(数据包包号为1-3的数据包)。

包号4的数据包,就是客户端向服务器发送的client hello消息,开始会话连接。

展开这个4号数据包。

这里可以看到客户端所支持的TLS版本。

生成的随机数,用于生成对话密钥。

Cipher suites支持7种加密算法。

当服务器收到客户端的请求后,会向客户端发送一个响应数据包。也就是包号为6号的数据包。

这里可以看到发送信息为server hello。收到这个数据包是服务器发送给客户端的响应数据包,代表服务器已经收到来自客户端的请求。

这里展开6号数据包。

服务器支持的TLS版本。

生成的随机数,用于生成对话密钥。

加密套件信息。这里加密套件信息中有使用RSA公钥算法来验证证书以及交换密钥,使用AES加密算法对数据进行加密,使用SHA算法来校验消息的内容。

客户端收到服务器的响应后,首先验证服务器的证书。如果证书不是由可信任的机构颁发的,或者证书中的域名与实际域名不一致,或者证书已过期,就会向访问者显示一个警告,由访问者选择是否还要继续通信。如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后向服务器发送一些信息,包括用服务器公钥加密的随机数,编码改变通知和客户端握手结束通知等。

包号为10的数据包。

这个是服务器发送给客户端的数据包,里面包含有证书的详细信息。详细信息里面就有请求的网站,组织名,地区名,省名以及国家等的信息。

在这里我们可以看到详细信息内容是中国广东深圳腾讯公司。

Signedcertificate是签名证书信息。“签名”的作用就在于,客户端(浏览器)在确定是否要信任一个网站时,就是通过证书判断的。所以每个证书上必须要有一份“签名”。

最后一行Length的值为0,表示告诉客户端“hello”过程已经完成,意味着服务器将不验证客户端的证书。

包号为12的数据包,是在客户端收到并验证服务器响应的证书后,将会把生成的密钥传给服务器。

展开包号为12的数据包。

在Clinent key Exchange中,我们可以看到TLS的类型、版本、长度、握手协议、握手类型、长度、密钥交换算法客户端参数、公钥长度以及加密公钥等信息。

经过以上的几个阶段,整个握手过程也就结束了。接下来客户端与服务器进入加密通信的阶段,就完全是使用普通的HTTP协议,但是会使用会话密钥来加密内容。用户可以发送通过TLS层使用RC4加密的HTTP的消息,也可以解密服务端发送来的由RC4加密的消息。此外还会通过哈希算法来验证消息是否被篡改。(哈希算法在后面的密码学中会有个知识点)

在这里可以看到包号为15和16的数据包为客户端发送给服务器的信息和服务器发送给客户端的响应信息,这里都是使用TLS加密处理的密文。

包号为15的数据包。

包号为16的数据包。

这里可以看到数据信息都是使用TLS进行了加密。

HTTPS数据包不是绝对的安全的,在一定的条件下是可以解密的。如果在服务器导出密钥,我们就可以进行解密操作,不同的服务器情况也不一样,所以想要破解HTTPS数据包是需要满足很多的条件的。

 

阅读剩余
THE END