计算机网络学习之 Https 相关

951 阅读5分钟

计算机网络学习之 Https 相关

一、前言

上一篇写了关于 HTTP 相关的知识,还没看的最好先去看下 计算机网络学习之 http 相关

其实 HTTPS 协议只是在 HTTP 的应用层中,多加了个 SSL/TLS 协议,对比图如下:

也就是说 HTTPS = HTTP + SSL/TLS

这里先有个大致的了解就行,接下来具体看下 HTTPS:

二、HTTPS 简介

为什么要使用 HTTPS?

HTTP 协议是不加密的,数据在传输中是明文的,存在被消息被篡改、被监听、被伪造的可能,也就造成了潜在的安全隐患。

为了保证互联网数据传输中的安全性,所以在 HTTP 协议中加入了一层 SSL/TLS 协议,就是现在我们说的 HTTPS ,HTTPS 能够使数据在传输的过程中是加密的,保证数据安全。

HTTP 和 HTTPS 的区别

  1. HTTP 数据明文传输,HTTPS 数据加密传输
  2. HTTP 不需要证书,HTTPS 需要申请 CA 证书
  3. HTTP 默认80端口,HTTPS 默认 443 端口
  4. HTTPS 比 HTTP 安全,因为比 HTTP 多了 SSL 层

SSL/TLS

SSL协议(Secure Sockets Layer)翻译就是 安全套接字层,TLS(Transport Layer Security )是在 SSL 演变过程中的生成的,也就是 TLS 是 SSL 的新版本。

客户端和服务端在交互的过程中,都要通过 TLS 层进行加密和解密,从而保证了数据的安全传输和完整传输。

SSL/TLS 也会进行握手操作,成为 SSL 握手。SSl 握手是在 HTTP 三次握手以后进行的,所以 SSl 握手过程是不安全的,所以在这种情况下就需要借助数字证书来保证 SSL 握手的正确性,但是要注意的是,SSL/TLS 协议不仅仅适用于 HTTP协议,是可以用于任何应用层的协议的。

数字证书简称为 CA,是由权威机构发布的,也就是讲数字证书是可以被我们所信赖的,如果要使用 HTTPS 的话,就需要去证书机构申请证书,大致流程如下:

  1. 公司向证书机构 CA 申请证书,并把自己服务器的公钥交给证书机构
  2. CA 根据公司提供的信息,会决定要不要给其颁发证书,如果确认颁发证书,就把公司的公钥放入证书之中,并且用自己的私钥进行加密,交给服务器。
  3. 然后客户端在完成三次握手以后会和服务器进行 SSL 握手,拿到服务器返回的证书进行校验,通过后才可以进行加密传输。

三、HTTPS 握手过程

1.Client Hello

第一次客户端通过 Client Hello 消息把随机数(称为 Random1)、Session ID 支持的加密算法发送给服务器

2.Server Hello

服务器确定好定本次通信采用的SSL版本和加密算法,如果服务器允许客户端在以后的通信中重用本次会话,则服务器会为本次会话分配会话ID,生成服务器的随机数 (称为 Random2)最终都通过 Server Hello 发送给客户端

3.Certificate, Certificate Status, Server Key Exchange, Server Hello Done

这步的主要作用就是吧把证书等信息发送给客户端。

4.Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message

-w1345

Client Key Exchange 是在校验通过以后,客户端又生成一个随机数(Random 3),利用证书中的公钥对其进行加密,告诉服务端。

这个时候客户端已经有Random1、Random2、Random3三个随机数。

Change Cipher Spec 客户端发送消息,通知服务器后续报文将采用协商好的密钥和加密套件进行通信 。

Encrypted Handshake Message 客户端计算已交互的握手消息(除Change Cipher Spec消息外所有已交互的消息)的 Hash 值,利用协商好的密钥和加密算法处理 Hash 值(计算并添加MAC值、加密等),并通过 Encrypted Handshake Message 消息发送给 服务器。服务器利用同样的方法计算已交互的握手消息的Hash值,并与 Encrypted Handshake Message 消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

5.Change Cipher Spec, Encrypted Handshake Message

-w1336
服务器通过自己的私钥对客户端传来的数据进行解密,得到 Random3。

这样服务端也有Random1、Random2、Random3三个随机数。 这个时候客户端和服务端都有Random1、Random2、Random3三个随机数,然后服务器发送Change Cipher Spec消息,通知客户端后续报文将采用协商好的密钥和加密套件进行通信。

Encrypted Handshake Message 服务器计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过 Encrypted Handshake Message 消息发送给客户端。客户端利用同样的方法计算已交互的握手消息的Hash值,并与Encrypted Handshake Message消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功。

通过上面的步骤,客户端和服务端都使用 Random1、Random2、Random3三个随机数 根据商定好的规则,生成对称秘钥(master secret),各自保存在本地,用该秘钥加密接下来的数据。

6.正常通信

-w1345

前面完成了 SSL 握手操作,这里就可以利用刚才协商好的秘钥进行数据的加密传输。

四、最后

HTTP 相关的知识就先了解这么多,先大体知道是个什么样的流程,后面有空再深入的研究吧。

参考 1 参考 2

欢迎关注我的公众号:

我的公众号