计算机网络学习之 Https 相关
一、前言
上一篇写了关于 HTTP 相关的知识,还没看的最好先去看下 计算机网络学习之 http 相关。
其实 HTTPS 协议只是在 HTTP 的应用层中,多加了个 SSL/TLS 协议,对比图如下:
image也就是说 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 握手过程
image1.Client Hello
imageimage
第一次客户端通过 Client Hello 消息把随机数(称为 Random1)、Session ID 支持的加密算法发送给服务器
2.Server Hello
image服务器确定好定本次通信采用的SSL版本和加密算法,如果服务器允许客户端在以后的通信中重用本次会话,则服务器会为本次会话分配会话ID,生成服务器的随机数 (称为 Random2)最终都通过 Server Hello 发送给客户端
3.Certificate, Certificate Status, Server Key Exchange, Server Hello Done
image这步的主要作用就是吧把证书等信息发送给客户端。
4.Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
-w1345Client 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 相关的知识就先了解这么多,先大体知道是个什么样的流程,后面有空再深入的研究吧。
欢迎关注我的公众号:
我的公众号
网友评论