前言:本文是的第三篇文章。第一篇文章《常见加密算法特点及适用场景》,介绍了常见加密算法及其适用的场景,对加密算法做一个总体的概述。第二篇文章《非对称加密算法-RSA算法》,通过RSA算法,梳理了不易理解的非对称加密算法的实现思路(对称加密算法由于容易理解,不做过多介绍)。而本篇文章,将通过 HTTPS的通信过程,以一个实例,介绍了各种加密算法在实际中的应用。希望通过三篇文章,能够对加密算法有一个全面初步的了解。( 题外话,个人觉的,对于日常开发,加密算法掌握以上部分内容即可,如果项目有需要,再深入研究也不迟。个人意见,仅供参考!)

HTTPS是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。 HTTPS的通信过程,充分利用了各种加密算法及其特性,本文将通过介绍HTTPS的通信过程,介绍了各种加密算法在实际中的应用。

一、HTTPS安全通信演化过程

为了更好的说明HTTPS的安全传输原理,我们虚拟了以下的故事。

1、裸奔—明文传输

洞洞:"呼叫洞妖,呼叫洞妖!"

洞妖:"我是洞妖,我是洞妖,有啥事?"

洞洞:"有个关于老板的八卦新闻,你要不要听?"

洞妖:"快讲,快讲…..."

于是洞洞和洞妖"宾主双方"就"愉快"地聊起了八卦新闻。

2、有人偷听—对称加密算法

洞洞:"洞妖,洞妖。我这里又有新的八卦新闻,你要不要听?"

洞妖:"不要了,上一次我们聊八卦的事情,都被其它人知道了。我们通信都是明文的,在网络上感觉就像裸奔。"

洞洞:"……,要不这样,我们弄个加密算法,用密钥把我们的通信内容加密一下,传输给你,你通过解密算法用密钥解密,这样就不怕别人监听了,就像这样。"

洞妖:"好是好,可是密钥你要怎么给我呢?总不能这样刺裸裸的通过网络明文传输密钥吧。"

洞洞:"这倒也是。要不这样,我下次过去找你,随身带过去给你。"

洞妖:"成。"

在洞妖得到密钥之后,他们又可以愉快地聊天了。

3、可以公开的密钥—非对称加密算法

洞妖:"呼叫洞洞,呼叫洞洞!"

洞洞:"啥事?"

洞妖:"请教你一个问题,如果我想和其它人在网络上聊天,有没有其它的加密算法,我总不能一个个的先跑到他们身边把密钥当面告诉他们后,再通过网络聊天吧,如果这些人是天南地北的呢?"

洞洞:"有办法。有一种非对称加密算法,它有两个密钥,一个是公钥,可以明文传输的。一个是私钥,由我保存,其它人都不知道。加密和解密算法不同。你通过公钥加密的信息只有我用私钥才能解开,就像这样。"

洞妖:"好方法,那根据这个算法,我生成一套公钥私钥对,你也生成一套不同的公钥私钥对。我们各自告诉对方公钥。我传信息给你的时候,用你给的公钥加密,你用你的私钥解密。同样的,你给我发信息的时候,用我给的公钥加密,我收到信息后用我的私钥解密。"

洞洞:"聪明。来来来,我再和说一个老板的八卦吧…..."

4、有点慢—非对称加密算法+对称加密算法

洞妖:"洞洞,洞洞!"

洞洞:"咋了?"

洞妖:"你有没有发现,用非对称加密算法进行通信,其加解密过程特别慢?"

洞洞:"是有点慢。因为非对称加密算法运算量大。那要不这样,我们第一次用非对称加密算法传递对称加密算法的密钥,后续通信就用对称加密算法。除了第一次用非对称加密算法加解密密钥的时候比较慢外,其它时间都不会慢了。而且也可以保证对称加密算法密钥的安全性。这样可以充分利用非对称加密算法和对称加密算法的各自特点。"

洞妖:"妥!"

5、你是谁—数字证书

洞妖:"洞洞,洞洞!"

洞洞:"啥事?"

洞妖:"洞洞,你咋证明你洞洞呢?"

洞洞:"我去,这不就是和要证明你爹是你爹一个道理嘛。"

洞妖:"哈哈哈,别误会。我想说的是,会不会在我们通信过程中,有个中间人,而我们收到的公钥都是他的,他获取我们的各自消息,然后中转。那他就可以看到我们所有的信息,就像这样(中间人攻击)"

洞洞:"我去,如果中间人是老板,那我们不是死翘翘了。看来还是在公钥传输上出问题。你看,要不这样,我们找个可靠的人做公证人,我们各自把公钥交给他。由他让颁布一个证书,证书包含公钥以及我们的身份信息,来证明我们各自的身份。"

洞妖:"可行,不过如果证书在传输过程中被人篡改,别人偷窥了呢?"

洞洞:"可以让公证人用数字摘要算法,把公钥和身份信息生成一个摘要。同时用非对称加密算法把对摘要进行加密,生成数字签名。然后把【公钥和身份信息+数字签名】合并,形成数字证书。就像这样"

洞妖:"嗯,那我在获得数字证书的时候,就可以用公钥进行解密生成摘要信息,再用数字摘要算法对公钥和身份信息生成摘要信息,两者比对,如果能匹配,就说明没有被篡改。"

 备注:数字证书通常来说是由受信任的数字证书颁发机构CA,在验证服务器身份后颁发。

6、谁值得信任—证书内置

洞妖:"等等,好像还有问题。公证人公钥传输过程也会出现中间人攻击问题。"

洞洞:"我去,我们采用数字证书方式就是为了解决公钥传输的中间人攻击问题,现在公证人的公钥传输也出现中间人攻击问题,死循环了。看来,这个公证人公钥只能事先通过其它途径给你了。"

洞妖:"我们把公证人公钥预先加载在操作系统中即可。"

洞洞:"完美!当然,如果操作系统和浏览器的公钥也被篡改,那我们就没招了。所以不要轻易信任安装未知证书。"

备注:微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构,把这些证书发布机构的证书默认安装在操作系统中,并且设置为操作系统信任的数字证书。

二、总结

HTTPS的信任基于预先安装在操作系统中的证书颁发机构(CA)。可实现防篡改和中间人攻击。它的简易安全通信过程如下:

HTTPS安全通信过程的更多相关文章

  1. 网络安全——一图看懂HTTPS建立过程

    关于网络安全加密的介绍可以看之前文章: 1. 网络安全--数据的加密与签名,RSA介绍 2. Base64编码.MD5.SHA1-SHA512.HMAC(SHA1-SHA512) 3. When I ...

  2. 图解HTTPS建立过程

    阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-S ...

  3. HTTPS数据传输过程简介

    HTTPS数据传输过程 1.客户端发起HTTPS连接握手 2.服务端收到HTTPS握手连接请求,与客户建立握手过程,和TCP的三次握手类似,并发送一系列的加密算法组合给客户端,与客户端协商加密算法组合 ...

  4. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程(缺heartbeat)

    SSL.TLS协议格式.HTTPS通信过程.RDP SSL通信过程   相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868 ...

  5. 【转】网络安全——一图看懂HTTPS建立过程

    阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-S ...

  6. 大话https演化过程(对称加密、非对称加密、公钥、私钥、数字签名、数字证书)

    大话https演化过程(包括概念:对称加密.非对称加密.公钥.私钥.数字签名.数字证书.https访问全过程)   在网络上发送数据是非常不安全的,非常容易被劫持或是被篡改,所以每次定向发送数据你都可 ...

  7. TLS就是SSL的升级版+网络安全——一图看懂HTTPS建立过程——本质上就是引入第三方监管,web服务器需要先生成公钥和私钥,去CA申请,https通信时候浏览器会去CA校验CA证书的有效性

    起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于 ...

  8. 加密解密(4)SSL协议及HTTPS握手过程

    SSL协议 简介 SSL (Secure Sockets Layer 安全套接层)是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性.因特网的 超文本传输协议 (HTTP)使用 ...

  9. 浅谈HTTPS传输过程

    HTTPS是什么 HTTPS不是一个新的协议,可以理解为是一个HTTP协议的加密"版本"(HTTP+SSL(TLS)).那为什么HTTP协议需要加密,不加密会出现什么问题呢?先来了 ...

随机推荐

  1. 分布式事务一2PC

    分布式事务解决方案之2PC(两阶段提交) 前面已经学习了分布式事务的基础理论,以理论为基础,针对不同的分布式场景业界常见的解决方案有2PC.TCC.可靠消息最终一致性.最大努力通知这几种. 3.1.什 ...

  2. 类加载器ClassLoader源码解析

    1.ClassLoader作用 类加载流程的"加载"阶段是由类加载器完成的. 2.类加载器结构 结构:BootstrapClassLoader(祖父)-->ExtClassL ...

  3. 生命游戏(python实现,pygame显示图形)

    # 游戏规则:# 生命游戏(Game of Life),或者叫它的全称John Conway's Game of Life.是英国数学家约翰·康威在1970年代所发明的一种元胞自动机.# 1. 活细胞 ...

  4. Ajax方式导出Excel,浏览器显示下载Excel表

    以前实现导出Excel,都是用form表单提交,因为jquery封装的ajax请求导出Excel,浏览器不显示文件. 但是这次的需求要带着header,form表单不能带header,百度了下,原生a ...

  5. (转载)人脸识别中Softmax-based Loss的演化史

    人脸识别中Softmax-based Loss的演化史  旷视科技 近期,人脸识别研究领域的主要进展之一集中在了 Softmax Loss 的改进之上:在本文中,旷视研究院(上海)(MEGVII Re ...

  6. StandardServer.await: Invalid command '' received

    tomcat服务运行时 后台提输出警告:StandardServer.await: Invalid command '' received 这个警告是 多个tomcat启动时会出现端口占用的情况, 将 ...

  7. Python - Django - 中间件 process_view

    process_view 的执行顺序也是按照 settings.py 中的顺序来执行 process_view 在 urls.py 的对应关系之后,在执行视图函数之前执行 如果返回 None,则继续执 ...

  8. Python线程池及其原理和使用(超级详细)

    系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 线程池在系统启动时即 ...

  9. helm安使用

    参照:https://juejin.im/post/5b6590afe51d4519962f02b1

  10. C#.NET LoadXml 时 “根级别上的数据无效。 行 1,位置 1”

    去除XML HEADER: <?xml version="1.0" encoding="utf-8"?> if (rspBusiXml.Contai ...