内容简介:上一篇写了关于 HTTP 相关的知识,还没看的最好先去看下其实 HTTPS 协议只是在 HTTP 的应用层中,多加了个 SSL/TLS 协议,对比图如下:也就是说 HTTPS = HTTP + SSL/TLS
上一篇写了关于 HTTP 相关的知识,还没看的最好先去看下 计算机网络学习之 http 相关 。
其实 HTTPS 协议只是在 HTTP 的应用层中,多加了个 SSL/TLS 协议,对比图如下:
也就是说 HTTPS = HTTP + SSL/TLS
这里先有个大致的了解就行,接下来具体看下 HTTPS:
二、HTTPS 简介
为什么要使用 HTTPS?
HTTP 协议是不加密的,数据在传输中是明文的,存在被消息被篡改、被监听、被伪造的可能,也就造成了潜在的安全隐患。
为了保证互联网数据传输中的安全性,所以在 HTTP 协议中加入了一层 SSL/TLS 协议,就是现在我们说的 HTTPS ,HTTPS 能够使数据在传输的过程中是加密的,保证数据安全。
HTTP 和 HTTPS 的区别
- HTTP 数据明文传输,HTTPS 数据加密传输
- HTTP 不需要证书,HTTPS 需要申请 CA 证书
- HTTP 默认80端口,HTTPS 默认 443 端口
- 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 的话,就需要去证书机构申请证书,大致流程如下:
- 公司向证书机构 CA 申请证书,并把自己服务器的公钥交给证书机构
- CA 根据公司提供的信息,会决定要不要给其颁发证书,如果确认颁发证书,就把公司的公钥放入证书之中,并且用自己的私钥进行加密,交给服务器。
- 然后客户端在完成三次握手以后会和服务器进行 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
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
服务器通过自己的私钥对客户端传来的数据进行解密,得到 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.正常通信
前面完成了 SSL 握手操作,这里就可以利用刚才协商好的秘钥进行数据的加密传输。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 计算机考研复试面试常问问题 计算机网络篇(下)
- 计算机网络常见基础问题
- 计算机网络到底该怎么学?
- 计算机网络学习之 Http 相关
- 五分钟自学编程:怎么学计算机网络
- 你应该知道的 12 道经典计算机网络面试题
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。