| |
|
开发:
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详解 HTTPtps: HTTP协议的笔记在另外一篇笔记中详细记载,这里对与HTTP协议的发展历史等不做阐述。 什么是HTTP
HTTP的特点
HTTP通信不加密的风险
HTTPS什么是HTTPS
HTTPS特点基于HTTP协议,通过SSL加密,实现了数据加密,验证身份,数据完整性保护。
SSL的混合加密
HTTPS中证书验证非对称加密的隐患之前说过混合加密主要使用了一个对称密钥和一对公钥和私钥。其中公钥和私钥是在服务端生成的,由服务端发送给客户端的,那么其中就有一个问题了,如果确保客户端获取的公钥就是目标服务器发送的,而不是中间服务器(中间人攻击)发送给你的呢? 中间人攻击如上图中所示,SSL加密中是使用公钥加密的对称密钥,同样也会被中间人截获到,所以需要确认客户端接收到的公钥是来自于目标服务器而不是其他服务器。HTTPS中使用证书验证来确认服务器的身份。 HTTPS证书证书简介SSL证书一般向权威的第三方CA机构去请求颁发。申请之后会提供给你一个证书和私钥,私钥直接存在服务端,证书则发送给客户端,因为证书中有公钥。(申请的方法这里不做阐述)
证书的验证那么当服务端将证书返回给客户端后,客户端就可以验证证书的真实性。
注:中间人攻击对于SSL为了能够拿到客户端的明文数据,那么就需要提供中间人自己的公钥和私钥,这样就可以得到后续的对称密钥,从而解密从客户端获取的加密数据。 但是对于客户端来说,公钥是从证书上获取的,那么中间人就需要伪造证书,修改上面的公钥。 伪造的证书发送客户端之后,通过CA机构解密对比验证就会发现不匹配,从而验证失败。一般会提醒用户异常,是否继续 用于加密数据的对称密钥生成前面说混合加密的基本含义时,特别说明了对称密钥使用了3个随机值来生成,那么具体的过程这里进行详细阐述。 握手阶段SSL/TLS协议基本过程简化表示为:
上述基本过程中的前两步,称为握手阶段。握手阶段涉及到4次通信。(握手阶段的所有通信都是明文的!) 第一次通信:客户端发出请求首先,客户端向服务端发出加密通信的请求,这被叫做ClientHello请求。这一步,客户端只要向服务器提供以下信息:
第二次通信:服务端回应服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容:
第三次通信:客户端回应客户端在接受到服务器回应后,会先验证证书。如果证书不是可信机构颁发、或者证书的域名与实际域名不一致、或者证书已经过期,就会像访问者显示一个警告,可以选择是否还要继续通信。
上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。此时客户端和服务端同时有了三个随机出A,B,C,那么他们就可以通过商定的加密加密方法,各自生成本次会话所用的同一把”会话密钥“。 第四次通信:服务器最后的回应服务器在收到客户端发送的第三个随机数”pre-master key“之后,计算生成本次会话所用的”会话密钥“(对称密钥)。然后向客户端发送下面的信息:
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议了,只不过使用”会话密钥“(对称密钥)加密内容。 HTTPS整体流程梳理
###结束语 参考链接 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 6:31:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |