[信息安全] 3.HTTPS工作流程
0. 简单回顾
在前面两篇博客中介绍了密码相关的一些基本工具,包括(对称密码,公钥密码,密码散列函数,混合密码系统,消息认证码码,数字签名,伪随机数,数字证书)这几个。其中它们之间也是互相依赖的,我们来简单的梳理一下它们的依赖关系。
对称密码:无。
公钥密码:无。
密码散列函数:无。
伪随机数:可以利用密码散列函数来实现,也可以不使用。
混合密码系统:对称密码 + 公钥密码 + 密码散列函数。
消息认证码:密码散列函数 + 对称密码。
数字签名:密码散列函数 + 公钥密码。
数字证书:公钥密码 + 数字签名。
这篇要介绍的HTTPS,则把以上这些全都派上场了。
1. HTTPS 简史
在早期HTTP诞生的这几年间,1990年~·1994年,HTTP作为一个应用层协议,它是这样工作的:
后来网景公司开发了SSL(Secure Sockets Layer)技术,然后它就变成了这样的HTTP,也就是HTTPS了:
后来爆发了与IE的世纪大战,网景败北,SSL移交给了IETF(Internat Engineering Task Force)互联网工程任务组,标准化之后变成了现在的TLS,现在一般会把它们两个放在一起称为SSL/TLS。本篇并不关注SSL/TLS具体是如何工作的,只是抽象的解释下HTTPS的一个工作流程。
2. HTTPS 工作流程
Client发起一个HTTPS(https:/demo.linianhui.dev)的请求,根据RFC2818的规定,Client知道需要连接Server的443(默认)端口。
Server把事先配置好的公钥证书(public key certificate)返回给客户端。
Client验证公钥证书:比如是否在有效期内,证书的用途是不是匹配Client请求的站点,是不是在CRL吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root证书或者Client内置的Root证书)。如果验证通过则继续,不通过则显示警告信息。
Client使用伪随机数生成器生成加密所使用的会话密钥,然后用证书的公钥加密这个会话密钥,发给Server。
Server使用自己的私钥(private key)解密这个消息,得到会话密钥。至此,Client和Server双方都持有了相同的会话密钥。
Server使用会话密钥加密“明文内容A”,发送给Client。
Client使用会话密钥解密响应的密文,得到“明文内容A”。
Client再次发起HTTPS的请求,使用会话密钥加密请求的“明文内容B”,然后Server使用会话密钥解密密文,得到“明文内容B”。
简单总结下,HTTPS是使用了证书的一个混合密码系统,其中证书的作用在于传递会话密钥,以及验证网站的真实性;而HTTPS真正的加密操作是由对称密码这个工具负责的(有兴趣的可以找找每个步骤中都用到了密码工具箱中的那些工具)。在windows系统中,可以配置一个名为 SSLKEYLOGFILE 的环境变量,Chrome和Firefox在访问HTTPS站点的时候,会把第4步生成的会话密钥以及其他附属信息,写入到这个文件中:
比如下图:
具体的格式可以参考MDN的一个说明https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format。
以上只是一个抽象的HTTPS的一个工作流程,实际上SSL/TLS所做的工作远不止这这些,更详细的解释请参考这篇文章:http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser。
如有错误之处,欢迎指正!
3. 参考
SSL/TLS:https://en.wikipedia.org/wiki/Transport_Layer_Security
IETF:https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force
HTTPS:https://en.wikipedia.org/wiki/HTTPS
HTTPS 连接最初的若干毫秒:http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser
HTTPS on Stack Overflow: The End of a Long Road:https://nickcraver.com/blog/2017/05/22/https-on-stack-overflow/
SSL/TLS部署最佳实践:https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
HTTP Over TLS:https://tools.ietf.org/html/rfc2818
SSLKEYLOGFILE:https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format
原文地址:http://www.cnblogs.com/linianhui/p/security-https-workflow.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
[信息安全] 3.HTTPS工作流程相关推荐
- 【计算机网络】HTTP 与 HTTPS ( HTTP 在网络各个层级的传输过程 | HTTPS 工作流程 | HTTPS 弊端 )
文章目录 一.HTTP 在网络各个层级的传输过程 二.HTTPS 工作流程 1.中间人篡改服务器下发的数字证书 2.中间人冒充服务器端 三.HTTPS 弊端 一.HTTP 在网络各个层级的传输过程 应 ...
- HTTPS 工作流程梳理
Https涉及到的主体 客户端.通常是浏览器(Chrome.IE.FireFox等),也可以自己编写的各种语言的客户端程序. 服务端.一般指支持Https的网站,比如github.支付宝. CA(Ce ...
- 深入理解HTTPS工作原理
前言 近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器.搜索引擎.CA机构.大型互联网企业的共同促进下,互联网迎来了"HTT ...
- SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个开始信息"Hello"以便开始一个新的会话连接:2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器 ...
- HTTPS的工作流程
hi,大家好,好久不见,今天为大家带来HTTPS协议的工作流程 认识HTTPS 加密是什么 HTTPS的工作流程 1.认识HTTPS HTTPS也是应用层协议,让我们再来回忆一下TCP/IP五层协议模 ...
- 深入浅出HTTPS工作原理 1
深入浅出HTTPS工作原理 看了这么多篇讲https和加密算法的文章,只有阮一峰老师和这位老师的总结比较好.特此转载. 本文经授权转自腾讯蓝鲸(微信号:Tencent_lanjing) 蔡卓伦 14年 ...
- python爬虫之Scrapy框架的post请求和核心组件的工作 流程
python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...
- travis ci_如何使用Travis CI和GitHub进行Web开发工作流程
travis ci by Vijayabharathi Balasubramanian 通过Vijayabharathi Balasubramanian 如何使用Travis CI和GitHub进行W ...
- 驰骋工作流程引擎案例-水质检测工作流程设计开发实现过程
2019独角兽企业重金招聘Python工程师标准>>> Technorati Tags: 开源驰骋工作流引擎, .NET工作流,表单设计器,ccflow, jflow, 案例,水质监 ...
最新文章
- 【搜】mysql压缩包减肥
- 理解一条语句:SELECT difference(sum(value)) FROM mq_enqueue WHERE channel =~ /ActiveMQ_TEST/ AND $tim...
- OPENSSL_1.0.2' not found
- SQL SERVER的锁机制(四)——概述(各种事务隔离级别发生的影响)
- 【pyqt5学习】——groupBox显示matplotlib图像
- case是java关键字吗_Java关键字
- JAVA中的适配器应用_Java适配器模式详解和实际应用.md
- 交互式反汇编器专业版IDA Pro的一点介绍
- 螃蟹保存方法保存时间_中秋吃不完的螃蟹如何保存?蟹农:生螃蟹冰箱冷藏,熟螃蟹别隔夜...
- 为什么要用dubbo,dubbo和zookeeper关系,简单的dubbo搭建
- 超燃动态可视化条形图源码及效果图_40行不到的Python代码实现超燃动态排序图...
- PHP 获取微视无水印源地址_如何提取获取下载美拍、微视、微拍等手机视频
- 计算机用户名携带中文路径,Win10 User下的中文用户名改成英文路径操作方法
- 来自一个IT民工的转型
- 施密特正交化过程编程c语言,利用C程序编写格拉姆-施密特正交化的过程..docx
- 微信小程序开发动感十足的加载动画--都在这里!
- python反距离权重法_使用Python进行反距离加权(IDW)插值
- Android 9.0 framework 授予安装未知来源应用权限(去掉未知来源弹窗)
- 泛微oa流程表单之请假单(判断请假结束时间不能小于等于请假开始时间)
- FBI的阅人术_如何在一开始谈话的几分钟内,了解这个人?