本文原作者“虞大胆的叽叽喳喳”,原文链接:jianshu.com/p/8861da5734ba,感谢原作者。

1、引言

很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说这就足够了;

但对于程序员,很有必要了解下 HTTP 到底有什么问题?以及HTTPS 是如何解决这些问题的?其背后的解决思路和方法是什么?

本文只做简单的描述,力求简单明了的阐明主要内容,因为HTTPS 体系非常复杂,这么短的文字是无法做到很详细和精准的分析。想要详细了解HTTPS的方方面面,可以阅读此前即时通讯网整理的《即时通讯安全篇(七):如果这样来理解HTTPS,一篇就够了》一文。

(本文同步发布于:http://www.52im.net/thread-2027-1-1.html)

2、HTTPS相关文章

《即时通讯安全篇(七):如果这样来理解HTTPS,一篇就够了》

《一文读懂Https的安全性原理、数字证书、单项认证、双项认证等》

《HTTPS时代已来,打算更新你的HTTP服务了吗?》

《苹果即将强制实施 ATS,你的APP准备好切换到HTTPS了吗?》

3、对HTTPS性能的理解

HTTP 有典型的几个问题,第一就是性能,HTTP 是基于 TCP 的,所以网络层就不说了(快慢不是 HTTP 的问题)。

比较严重的问题在于 HTTP 头是不能压缩的,每次要传递很大的数据包。另外 HTTP 的请求模型是每个连接只能支持一个请求,所以会显得很慢。

那么 HTTPS 是解决这些问题的吗?

不是,实际上 HTTPS 是在 HTTP 协议上又加了一层,会更慢,相信未来会逐步解决的。同时 HTTPS 用到了很多加密算法,这些算法的执行也是会影响速度的。

为什么说 HTTPS 提升了性能呢?因为只有支持了 HTTPS,才能部署 HTTP/2,而 HTTP/2 协议会提升速度,能够有效减轻客户端和服务器端的压力,让响应更快速。有关HTTP/2详细文章可以看看《从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路》、《脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)》,这里只要知道一点:HTTP/2 能够加快速度的主要原因在于多路复用,同一个连接能够并行发送和接收多个请求。

4、传统HTTP的安全性问题

当用户在浏览器输入一个网址的时候,在地址栏上看到小锁图标,就会安心,潜意识的认为自己的上网行为是安全的,当然对于小白用户来说可能还不明白,但是未来会慢慢改善的(万事开头难嘛)。

那么 HTTP 到底有什么安全问题呢,看几个例子:

1)由于互联网传输是能够被拦截的,所以假如你的上网方式被别人控制了(没有绝对的安全),那么你的任何行为和信息攻击者都会知道,比如我们连上一个匿名的 WIFI,当你上网的时候,输入的网站密码可能就已经泄漏了;

2)当我们在上一个网站的时候,莫名其妙跳出一个广告(这个广告并不是这个网站的),那是因为访问的页面可能被运营商强制修改了(加入了他自己的内容,比如广告)。

HTTP 最大的问题就在于数据没有加密,以及通信双方没有办法进行身份验证( confidentiality and authentication),由于数据没有加密,那么只要数据包被攻击者劫持,信息就泄漏了。

身份验证的意思就是服务器并不知道连接它的客户端到底是谁,而客户端也不确定他连接的服务器就是他想连接的服务器,双方之间没有办法进行身份确认。

有关HTTP比较好的文章,可以看看:

《网络编程懒人入门(七):深入浅出,全面理解HTTP协议》

《从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路》

《脑残式网络编程入门(三):HTTP协议必知必会的一些知识》

5、HTTPS 背后的密码学

为了解决 HTTP 的两个核心问题,HTTPS 出现了,HTTPS 包含了核心的几个部分:TLS 协议、OpenSSL,证书。

什么是 OpenSSL 呢,它实现了世界上非常重要和多的密码算法,而密码学是解决问题最重要的一个环节。

TLS 最重要的是握手的处理方式。证书的体系也很大,但是他们背后都是基于同样的密码学。

1)既然 HTTP 没有数据加密,那么我们就加密下,对称加密算法上场了,这种算法加密和解密要使用同一个密钥,通信双方需要知道这个密钥(或者每次协商一个),实际上这种方法不太可能,这涉及到密钥保密和配送的问题,一旦被攻击者知道了密钥,那么传输的数据等同没有加密。

2)这个时候非对称加密算法上场了,公钥和私钥是分开的,客户端保存公钥,服务器保存私钥(不会公开),这时候好像能够完美解决问题了。

但实际上会存在两个问题,第一就是非对称加密算法运算很慢,第二就是会遇到中间人攻击问题。

先说说中间人攻击的问题,假如使用非对称加密算法,对于客户端来说它拿到的公钥可能并不是真正服务器的公钥,因为客户端上网的时候可能不会仔细分辨某个公钥是和某个公司绑定的,假如错误的拿到攻击者的公钥,那么他发送出去的数据包被劫持后,攻击者用自己的私钥就能反解了。

3)接下来如何解决公钥认证的问题呢?证书出现了,证书是由 CA 机构认证的,客户端都充分信任它,它能够证明你拿到的公钥是特定机构的,然后就能使用非对称加密算法加密了。

证书是怎么加密的呢?实际上也是通过非对称加密算法,但是区别在于证书是用私钥加密,公钥解密。

CA 机构会用自己的私钥加密服务器用户的公钥,而客户端则用 CA 机构的公钥解出服务器的公钥。听上去有点晕,仔细体会下。这方面的知识,可以详细阅读:《即时通讯安全篇(七):如果这样来理解HTTPS,一篇就够了》。

4)上面说了非对称加密算法加密解密非常耗时,对于 HTTP 这样的大数据包,速度就更慢了,这时候可以使用对称加密算法,这个密钥是由客户端和服务器端协商出来,并由服务器的公钥进行加密传递,所以不存在安全问题。

5)另外客户端拿到证书后会验证证书是否正确,它验证的手段就是通过 Hash 摘要算法,CA 机构会将证书信息通过 Hash 算法运算后再用私钥加密,客户端用 CA 的公钥解出后,再计算证书的 Hash 摘要值,两者一致就说明验证身份通过。

6)HTTPS 解决的第三个问题是完整性问题,就是信息有没有被篡改(信息能够被反解),用的是 HMAC 算法,这个算法和 Hash 方法差不多,但是需要传递一个密钥,这个密钥就是客户端和服务器端上面协商出来的。

附录:更多安全方面的文章

《即时通讯安全篇(一):正确地理解和使用Android端加密算法》

《即时通讯安全篇(二):探讨组合加密算法在IM中的应用》

《即时通讯安全篇(三):常用加解密算法与通讯安全讲解》

《即时通讯安全篇(四):实例分析Android中密钥硬编码的风险》

《即时通讯安全篇(五):对称加密技术在Android平台上的应用实践》

《即时通讯安全篇(六):非对称加密技术的原理与应用实践》

《传输层安全协议SSL/TLS的Java平台实现简介和Demo演示》

《理论联系实际:一套典型的IM通信协议设计详解(含安全层设计)》

《微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解》

《来自阿里OpenIM:打造安全可靠即时通讯服务的技术实践分享》

《简述实时音视频聊天中端到端加密(E2EE)的工作原理》

《移动端安全通信的利器——端到端加密(E2EE)技术详解》

《Web端即时通讯安全:跨站点WebSocket劫持漏洞详解(含示例代码)》

《通俗易懂:一篇掌握即时通讯的消息传输安全原理》

《IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token》

《快速读懂量子通信、量子加密技术》

《即时通讯安全篇(七):如果这样来理解HTTPS原理,一篇就够了》

《一分钟理解 HTTPS 到底解决了什么问题》

>> 更多同类文章 ……

(本文同步发布于:http://www.52im.net/thread-2027-1-1.html)

一分钟理解 HTTPS 到底解决了什么问题相关推荐

  1. 深入理解HTTPS及其安全性问题

    目录 一.HTTP 为什么不安全 1.窃听风险 2.篡改风险 3.冒充风险 二.安全通信的四大原则(机密性.完整性,身份认证和不可否认) 三.HTTPS 通信原理简述 1.对称加密:HTTPS 的最终 ...

  2. 轻松理解https,So easy!

    作者:翟志军 https://showme.codes/2017-02-20/understand-https/ 本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这 ...

  3. 也许,这样理解 HTTPS 更容易

    本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于"还原 ...

  4. 也许,这样理解HTTPS更容易

    https://juejin.im/post/5b8367b1e51d453884361fc3 摘要: 本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表H ...

  5. 深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求(上)

    2019独角兽企业重金招聘Python工程师标准>>> 深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求 一.引言 本篇博客主要讨论如何在客户端与服务端之间进行HTTPS ...

  6. 五分钟理解什么是面向对象

    昨天讲了MVC,有同学表示还想了解一些软件开发架构方面的姿势.我琢磨了半天,列了不少技术名词,本来想挑一个出来讲一讲,写了一半发现有很多前置知识之前没涉及,于是决定把坑填一填,先从基础的「面向对象」讲 ...

  7. 十分钟理解Transformer

    本文转载于知乎文章:十分钟理解Transformer Transformer是一个利用注意力机制来提高模型训练速度的模型.关于注意力机制可以参看这篇文章,trasnformer可以说是完全基于自注意力 ...

  8. 什么是深度学习?45分钟理解深度神经网络和深度学习 刘利刚教授

    什么是深度学习? - 45分钟理解深度神经网络和深度学习 刘利刚 中国科学技术大学图形与几何计算实验室 http://staff.ustc.edu.cn/~lgliu [绪言] 近年来,人工智能(Ar ...

  9. 分分钟让你理解HTTPS

    想获取更多的前端技术-请专注公众号:胖梅web前端 一.HTTP存在的问题 1.1 可能被窃听 HTTP 本身不具备加密的功能,HTTP 报文使用明文方式发送 由于互联网是由联通世界各个地方的网络设施 ...

最新文章

  1. pthreads v3在centos7下的安装与配置
  2. IT界程序员几大恶习能立即让你变穷,你有吗?
  3. Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
  4. ftp 客户端 使用http代理 源码_代理服务器连接HTTPS过程
  5. 第三十三期:对于人工智能的恐惧及其5个解决方法
  6. Maven 手动安装Jar包的例子
  7. list删除重复元素
  8. ***书架上出现频率最高的9部半书籍
  9. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(8月20日-8月26日)
  10. Jquery向页面append新元素之后,如何解决事件的绑定问题?
  11. HTML 自动跳转代码
  12. MT2503环境搭建步骤及注意事项
  13. 免费又好用的录音软件推荐
  14. 同步助手java_八大手机平台全覆盖 QQ同步助手Java版发布
  15. iis10 asp 如何连接mdb_如何攻破一个网站
  16. mac触控板 鼠标中键_如何在Mac的触控板上添加中键
  17. Android记事本app
  18. 《东周列国志》第八十七回 说秦君卫鞅变法 辞鬼谷孙膑下山
  19. 【No server address listed in hbase:meta for region XX】
  20. Docusaurus 搭建个人博客(支持离线搜索)

热门文章

  1. 如何获得免费网络空间
  2. FLASH按钮链接网页
  3. 电信联通涉垄断被指因监管落后 处罚或不了了之
  4. SourceTree导入产品证书
  5. 趋势科技协助FBI破获大型跨国网络犯罪案 瓦解超过400万Botnet 殭尸大军
  6. CUMT中国矿业大学密码学20级考试
  7. idea子模块使用父模块变量properties in parent definition are prohibited
  8. 行测——逻辑推理——1三段论
  9. jquery判断文本框输入的是非数字内容(交流QQ群:452892873)
  10. 笔记本电脑“伪黑屏”故障原因