HTTPS安全通信过程
前言:本文是的第三篇文章。第一篇文章《常见加密算法特点及适用场景》,介绍了常见加密算法及其适用的场景,对加密算法做一个总体的概述。第二篇文章《非对称加密算法-RSA算法》,通过RSA算法,梳理了不易理解的非对称加密算法的实现思路(对称加密算法由于容易理解,不做过多介绍)。而本篇文章,将通过 HTTPS的通信过程,以一个实例,介绍了各种加密算法在实际中的应用。希望通过三篇文章,能够对加密算法有一个全面初步的了解。( 题外话,个人觉的,对于日常开发,加密算法掌握以上部分内容即可,如果项目有需要,再深入研究也不迟。个人意见,仅供参考!)
HTTPS是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。 HTTPS的通信过程,充分利用了各种加密算法及其特性,本文将通过介绍HTTPS的通信过程,介绍了各种加密算法在实际中的应用。
一、HTTPS安全通信演化过程
为了更好的说明HTTPS的安全传输原理,我们虚拟了以下的故事。
1、裸奔—明文传输
洞洞:"呼叫洞妖,呼叫洞妖!"
洞妖:"我是洞妖,我是洞妖,有啥事?"
洞洞:"有个关于老板的八卦新闻,你要不要听?"
洞妖:"快讲,快讲…..."
于是洞洞和洞妖"宾主双方"就"愉快"地聊起了八卦新闻。
2、有人偷听—对称加密算法
洞洞:"洞妖,洞妖。我这里又有新的八卦新闻,你要不要听?"
洞妖:"不要了,上一次我们聊八卦的事情,都被其它人知道了。我们通信都是明文的,在网络上感觉就像裸奔。"
洞洞:"……,要不这样,我们弄个加密算法,用密钥把我们的通信内容加密一下,传输给你,你通过解密算法用密钥解密,这样就不怕别人监听了,就像这样。"


洞妖:"好是好,可是密钥你要怎么给我呢?总不能这样刺裸裸的通过网络明文传输密钥吧。"
洞洞:"这倒也是。要不这样,我下次过去找你,随身带过去给你。"
洞妖:"成。"
在洞妖得到密钥之后,他们又可以愉快地聊天了。
3、可以公开的密钥—非对称加密算法
洞妖:"呼叫洞洞,呼叫洞洞!"
洞洞:"啥事?"
洞妖:"请教你一个问题,如果我想和其它人在网络上聊天,有没有其它的加密算法,我总不能一个个的先跑到他们身边把密钥当面告诉他们后,再通过网络聊天吧,如果这些人是天南地北的呢?"
洞洞:"有办法。有一种非对称加密算法,它有两个密钥,一个是公钥,可以明文传输的。一个是私钥,由我保存,其它人都不知道。加密和解密算法不同。你通过公钥加密的信息只有我用私钥才能解开,就像这样。"


洞妖:"好方法,那根据这个算法,我生成一套公钥私钥对,你也生成一套不同的公钥私钥对。我们各自告诉对方公钥。我传信息给你的时候,用你给的公钥加密,你用你的私钥解密。同样的,你给我发信息的时候,用我给的公钥加密,我收到信息后用我的私钥解密。"
洞洞:"聪明。来来来,我再和说一个老板的八卦吧…..."
4、有点慢—非对称加密算法+对称加密算法
洞妖:"洞洞,洞洞!"
洞洞:"咋了?"
洞妖:"你有没有发现,用非对称加密算法进行通信,其加解密过程特别慢?"
洞洞:"是有点慢。因为非对称加密算法运算量大。那要不这样,我们第一次用非对称加密算法传递对称加密算法的密钥,后续通信就用对称加密算法。除了第一次用非对称加密算法加解密密钥的时候比较慢外,其它时间都不会慢了。而且也可以保证对称加密算法密钥的安全性。这样可以充分利用非对称加密算法和对称加密算法的各自特点。"
洞妖:"妥!"
5、你是谁—数字证书
洞妖:"洞洞,洞洞!"
洞洞:"啥事?"
洞妖:"洞洞,你咋证明你洞洞呢?"
洞洞:"我去,这不就是和要证明你爹是你爹一个道理嘛。"
洞妖:"哈哈哈,别误会。我想说的是,会不会在我们通信过程中,有个中间人,而我们收到的公钥都是他的,他获取我们的各自消息,然后中转。那他就可以看到我们所有的信息,就像这样(中间人攻击)"
洞洞:"我去,如果中间人是老板,那我们不是死翘翘了。看来还是在公钥传输上出问题。你看,要不这样,我们找个可靠的人做公证人,我们各自把公钥交给他。由他让颁布一个证书,证书包含公钥以及我们的身份信息,来证明我们各自的身份。"
洞妖:"可行,不过如果证书在传输过程中被人篡改,别人偷窥了呢?"
洞洞:"可以让公证人用数字摘要算法,把公钥和身份信息生成一个摘要。同时用非对称加密算法把对摘要进行加密,生成数字签名。然后把【公钥和身份信息+数字签名】合并,形成数字证书。就像这样"
洞妖:"嗯,那我在获得数字证书的时候,就可以用公钥进行解密生成摘要信息,再用数字摘要算法对公钥和身份信息生成摘要信息,两者比对,如果能匹配,就说明没有被篡改。"
备注:数字证书通常来说是由受信任的数字证书颁发机构CA,在验证服务器身份后颁发。
6、谁值得信任—证书内置
洞妖:"等等,好像还有问题。公证人公钥传输过程也会出现中间人攻击问题。"
洞洞:"我去,我们采用数字证书方式就是为了解决公钥传输的中间人攻击问题,现在公证人的公钥传输也出现中间人攻击问题,死循环了。看来,这个公证人公钥只能事先通过其它途径给你了。"
洞妖:"我们把公证人公钥预先加载在操作系统中即可。"
洞洞:"完美!当然,如果操作系统和浏览器的公钥也被篡改,那我们就没招了。所以不要轻易信任安装未知证书。"
备注:微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构,把这些证书发布机构的证书默认安装在操作系统中,并且设置为操作系统信任的数字证书。
二、总结
HTTPS的信任基于预先安装在操作系统中的证书颁发机构(CA)。可实现防篡改和中间人攻击。它的简易安全通信过程如下:

HTTPS安全通信过程的更多相关文章
- 网络安全——一图看懂HTTPS建立过程
关于网络安全加密的介绍可以看之前文章: 1. 网络安全--数据的加密与签名,RSA介绍 2. Base64编码.MD5.SHA1-SHA512.HMAC(SHA1-SHA512) 3. When I ...
- 图解HTTPS建立过程
阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-S ...
- HTTPS数据传输过程简介
HTTPS数据传输过程 1.客户端发起HTTPS连接握手 2.服务端收到HTTPS握手连接请求,与客户建立握手过程,和TCP的三次握手类似,并发送一系列的加密算法组合给客户端,与客户端协商加密算法组合 ...
- SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程(缺heartbeat)
SSL.TLS协议格式.HTTPS通信过程.RDP SSL通信过程 相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868 ...
- 【转】网络安全——一图看懂HTTPS建立过程
阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-S ...
- 大话https演化过程(对称加密、非对称加密、公钥、私钥、数字签名、数字证书)
大话https演化过程(包括概念:对称加密.非对称加密.公钥.私钥.数字签名.数字证书.https访问全过程) 在网络上发送数据是非常不安全的,非常容易被劫持或是被篡改,所以每次定向发送数据你都可 ...
- TLS就是SSL的升级版+网络安全——一图看懂HTTPS建立过程——本质上就是引入第三方监管,web服务器需要先生成公钥和私钥,去CA申请,https通信时候浏览器会去CA校验CA证书的有效性
起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于 ...
- 加密解密(4)SSL协议及HTTPS握手过程
SSL协议 简介 SSL (Secure Sockets Layer 安全套接层)是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性.因特网的 超文本传输协议 (HTTP)使用 ...
- 浅谈HTTPS传输过程
HTTPS是什么 HTTPS不是一个新的协议,可以理解为是一个HTTP协议的加密"版本"(HTTP+SSL(TLS)).那为什么HTTP协议需要加密,不加密会出现什么问题呢?先来了 ...
随机推荐
- Pandas的DataFrame
1. 手工创建DataFrame a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]] data = DataFrame(a) 2. Excel数据数据 ...
- 在fedora 31 安装docker
简介: 本来没啥特别的,但是fedora使用的cgroup版本太高,docker还没跟上来. 就简单介绍一下怎么在fedora上安装docker吧 一:回退cgroup $ sudo dnf inst ...
- java 快速定位线上cpu偏高
1.top -c 加 大写P 查找高进程ID 2.top -Hp 加 大写 P 查找高线程ID 3.printf '%x\n' 线程ID 转成16进制 4.jstack 进程ID | grep 16进 ...
- 大数据分析常用去重算法分析『Bitmap 篇』
大数据分析常用去重算法分析『Bitmap 篇』 mp.weixin.qq.com 去重分析在企业日常分析中的使用频率非常高,如何在大数据场景下快速地进行去重分析一直是一大难点.在近期的 Apache ...
- Redis 的主从复制(Master/Slave)
目录 1. 是什么 2. 能干嘛 3. Redis主从复制讲解 (1). info replication:查看 目标redis 主从情况 (2) . 配从库不配主库 (3). 常用策略 (4). 复 ...
- linux解压xz文件
本来要下一个 tar.gz 文件的,但是下了一个 xz的,以为不能用了,但是万能的百度.. 解决方法: 首先打包成tar文件 xz -d demo.tar.xz j接着用 tar -xvf demo. ...
- mysql新增用户无法授权!? 解决方案
先上解决方法 :) 创建用户cat 密码 CREATE USER '; 修改user表中的注册用户cat update user set host='%' where user='cat'; 授权: ...
- jquery对div元素进行鼠标移动(稍稍修改下可以实现div跟随鼠标)
/* 网上找了资料都是对于event.clientX和offset().left进行了计算,但是去掉了这个计算方式,直接使用当前坐标也一样,效果都一样不太好 strHeader:标题 jquery定位 ...
- 资源对象的池化, java极简实现,close资源时,自动回收
https://www.cnblogs.com/piepie/p/10498953.html 在java程序中对于资源,例如数据库连接,这类不能并行共享的资源对象,一般采用资源池的方式进行管理. 资源 ...
- C++四大特性之封装
C++四大特性 C++作为面向对象编程语言,具备面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)的四大特性.抽象,封装,继承,多态. 所谓抽象,就是对具 ...