IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> https协议原理浅析 -> 正文阅读

[网络协议]https协议原理浅析

一.为什么需要https协议?

http是一种明文字符串传输协议,传输的数据在网络中很容易被人抓包,并不安全,所以涉及隐私信息的传输,就不能使用https协议,而需要一种更加安全的数据传输协议,https应运而生。
https协议并不是一个新的协议,而是在http协议的基础上使用SSL/TLS对报文进行了一层加密,目的是实现数据的安全传输;通过CA认证进行身份认证;使用哈希算法实现了数据的完整性保护的一种协议。

https协议解决的关于http的三大问题:

  1. 通信使用明文,可能会被窃听;
  2. 不验证通信方的身份,可能是伪装的中间人;
  3. 无法证明报文的完整性,内容可能遭篡改。

二.加密方式

1.对称密钥加密(共享密钥加密)

加密和解密使用相同的密钥

优点是加解密效率高,缺点是密钥一旦被劫持则加密形同虚设

2.非对称密钥加密(公开密钥加密)

加密和解密使用不同的密钥,公钥加密的数据只能用私钥解密,私钥加密的数据只能用公钥解密

具体流程:
通信过程中,每一端在通信前都生成一对密钥(公钥和私钥)。在通信前,通过广播形式将公钥发送给对端,对端使用收到的公钥进行数据加密然后传输,收到数据后,本端使用私钥进行解密。

主要算法:RSA加密算法

优点是安全度更高;
缺点是加解密复杂度高,效率低下,耗时长;

非对称加密的用法:私钥签名

  • 私钥签名的用处?
    验证数据明文的一致性,检测数据在网络传输过程中是否发生了篡改。

  • 私钥签名的步骤:
    通信两端分别用A、B表示
    第一步:A用自己的私钥对明文的哈希值进行加密生成密文,把明文和密文(签名)一起发送给B;
    第二步:B用A的公钥对密文进行解密,对解密后的密文哈希值和计算得到的明文哈希值进行对比,如果相同,说明数据明文没有发生改变,否则发生修改。

3.混合加密(https采取的加密方式)

对称加密的加解密效率高,非对称加密的安全性高,因此采取用非对称加密保护对称密钥的协商过程,这就是混合加密

具体流程是:
通信的一端将自己的对称密钥用对方的公钥进行加密后传输给对方,对方用私钥解密后就得到了对称密钥,之后的数据传输使用就使用对称密钥。


三.身份认证

1.CA证书的申请过程

服务器将自己的公钥和域名等一系列信息发送给权威机构申请一个CA证书;
权威机构会将服务端的公钥、颁发者、有效期等信息也就是证书内容打包并进行哈希运算,计算出一个哈希值;
权威机构用自己的私钥对这个哈希值进行加密,得到证书签名;
最后将证书签名添加到证书中,形成完整的CA证书并返回给服务器;

2.客户端验证服务端身份的过程

客户端向服务端请求CA证书;
服务端将CA证书发送给客户端;
客户端拿到CA证书后,查看权威机构是否是自己信任的权威机构,如果不是,可以自行选择是否添加信任;
通常浏览器和操作系统都集成了权威机构的公钥,因此可以使用权威机构公钥对CA证书中的证书签名进行解密,得到哈希值H1;
客户端使用CA证书中的签名哈希算法计算得到一个哈希值H2;
比较H1和H2是否相等,如果相等则说明证书是可信的,否则证书不可信,可以自行选择是否添加信任;


四.数据的完整性保护

  • 服务端在发送报文之前做的操作:
    用哈希算法对报文计算哈希值;
    用私钥对哈希值加密,形成数字签名;
    将数字签名附加到报文末尾发送给客户端;

  • 客户端收到报文之后的操作:
    使用服务器的公钥对数字签名进行解密,得到哈希值H1;
    使用CA证书中的哈希算法对报文计算哈希值,得到H2;
    比较H1和H2是否相同,不相同说明数据被篡改过。


五.https的完整流程

1.服务器请求颁发CA证书

服务器将自己的公钥和域名等一系列信息发送给权威机构申请一个CA证书;
权威机构会将服务端的公钥、颁发者、有效期等信息也就是证书内容打包并进行哈希运算,计算出一个哈希值;
权威机构用自己的私钥对这个哈希值进行加密,得到证书签名;
最后将证书签名添加到证书中,形成完整的CA证书并返回给服务器;
服务器将CA证书保存到本地;

2.TLS握手

  • 客户端向服务端打招呼:
    客户端向服务端发送自己支持的TLS版本、加密套件和一个随机数(称为第一随机数);
  • 服务端向客户端打招呼:
    服务端收到客户端的信息后,向客户端发送自己支持的TLS版本、并从客户端发送的加密套件中选择自己支持的一个、一个随机数(称为第二随机数);
    服务端向客户端继续发送自己的CA证书;
  • 服务端向客户端发送Server Hello Done报文,告诉客户端:服务端打招呼结束;
  • 客户端验证服务端身份信息:
    客户端拿到CA证书后,查看权威机构是否是自己信任的权威机构,如果不是,可以自行选择是否添加信任;
    通常浏览器和操作系统都集成了权威机构的公钥,因此可以使用权威机构公钥对CA证书中的证书签名进行解密,得到哈希值H1;
    客户端使用CA证书中的签名哈希算法计算得到一个哈希值H2;
    比较H1和H2是否相等,如果相等则说明证书是可信的,否则证书不可信,可以自行选择是否添加信任;
  • 客户端生成一个随机数(称之为预主密钥),使用服务端的公钥加密,将加密后的数据发送给服务端;
  • 服务端收到数据后使用私钥解密,得到预主密钥,并和第一随机数、第二随机数结合一起生成会话密钥;客户端也采用同样的算法生成会话密钥。往后的数据传输就是用会话密钥进行加密,会话密钥是一种对称密钥。

3.数据加密传输

使用会话密钥加解密数据进行通信。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 22:01:53  更:2022-02-05 22:02:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:32:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码