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协议需要加密,不加密会出现什么问题呢?先来了 ...
随机推荐
- 006-tomcat 多实例安装、appBase和docBase、Context说明
一.多实例部署 主要是为了充分利用服务器资源,并且可以交叉部署应用.主要做法可以有使用docker部署,多实例部署. 多实例多应用:多个 Tomcat 部署多个不同的项目.这种模式在服务器资源有限,或 ...
- 使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
安装配置 VSCode [1]安装 VSCode: 下载地址:https://code.visualstudio.com/ 根据自己电脑对应的操作系统下载对应的版本即可,至于安装过程也和一般的软件一样 ...
- 关于OpenGPU.org
今天是心情沉重的一天. OpenGPU.org,作为当年中国图形学界首屈一指的论坛,曾经创造过日访问破万的记录,而且汇聚了中国所有的图形行业的精英,大家畅所欲言,为整个中国图形学业界分享了无数宝贵的资 ...
- Dart入门
要学Flutter必先学Dart,Dart和Java的语法很像,学过Java的人很快就能入手 Dart下载地址https://dart.dev/get-dart VSCode下载地址https://c ...
- PLSQL无法连接64位Oracle数据库/Database下拉框为空的解决方法
原创:https://blog.csdn.net/sdmanooo/article/details/14055077 今儿个重装了个系统,win7 64位.接着装了个64位的oracle11g,ora ...
- IIS部署FLASK网站
在 Windows 平台部署基于 Python 的网站是一件非常折腾的事情,Linux/Unix 平台下有很多选择,本文记录了 Flask 部署到 IIS 的主要步骤,希望对你有所帮助. 涉及工具和平 ...
- 【Spring Cloud学习之一】微服务架构
一.网站架构模式发展 单体应用-->SOA-->微服务 1.分布式项目与项目集群分布式项目:根据业务需求进行拆分成N个子系统,多个子系统相互协作才能完成业务流程子系统之间通讯使用RPC远程 ...
- 待补充 MySQL必知必会第29章--------数据库维护
备份数据 由于MySQL数据库是基于磁盘的文件,普通的备份系统和里程就能备份MySQL的数据.但是,由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定总是生效.
- SimpleDataFormat 线程不安全解决
SimpleDataFormat 是我们常用的时间转换工具,我再spark中使用sdf对时间戳进行转换,发现转化出的时间有异常,原来sdf是线程不安全的, 改用joda time,错误消失,样例如下 ...
- (CSDN迁移) html中的rel属性
在页面上若需要同时存在多个页面,就通过一个button开启一个页面时,就需要指定不同的 rel="relName". 否则新页面就会将就原有的页面给覆盖掉.