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

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

下面坐下简单的描述,HTTPS 体系非常复杂,自己无法做到很详细和精准的分析。

性能

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

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

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

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

为什么说 HTTPS 提升了性能呢,因为只有支持了 HTTPS,才能部署 HTTP/2,而 HTTP/2 协议会提升速度,能够有效减轻客户端和服务器端的压力,让响应更快速,HTTP/2 未来会写一篇文章说说,这里只要知道一点:HTTP/2 能够加快速度的主要原因在于多路复用,同一个连接能够并行发送和接收多个请求。

安全性

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

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

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

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

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

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

HTTPS 背后的密码学

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

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

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

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

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

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

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

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

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

CA 机构会用自己的私钥加密服务器用户的公钥,而客户端则用 CA 机构的公钥解出服务器的公钥。听上去有点晕,仔细体会下。

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

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

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

原文发布时间为:2018-10-24
本文作者:虞大胆的叽叽喳喳
本文来自云栖社区合作伙伴“高效运维”,了解相关信息可以关注“高效运维”。

迈向 HTTPS,HTTPS 到底解决了什么问题相关推荐

  1. 一分钟理解 HTTPS 到底解决了什么问题

    本文原作者"虞大胆的叽叽喳喳",原文链接:jianshu.com/p/8861da5734ba,感谢原作者. 1.引言 很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说 ...

  2. HTTPS 协议到底比 HTTP 协议多些什么?

    来源:杰哥的IT之旅 作者:阿拉斯加 最近卷了一篇 HTTP 协议的相关知识,大家可以一起来看一下~ HTTP 简介 HTTP 协议是 Hyper Text Transfer Protocol(超文本 ...

  3. 记Outlook插件与Web页面交互的各种坑 (含c# HttpWebRequest 连接https 的完美解决方法)

    记Outlook插件与Web页面交互的各种坑 (含c# HttpWebRequest 连接https 的完美解决方法) 参考文章: (1)记Outlook插件与Web页面交互的各种坑 (含c# Htt ...

  4. 360极速浏览器显示https证书无效解决方法

    关于360极速浏览器显示https证书无效解决方法,笔者在网上找了很多,网上的说法概括如下 1.日期不对,右下角调下系统日期 2.证书没导入,ie浏览器导入证书,具体的用搜索工具搜索下 我现在要讲的可 ...

  5. Delphi Http Https 最好的解决方法(二)

    目录 1. 前言 2.功能代码 2.1. 接口单元 InterfaceDll.pas 2.2. 工具类 unt_objects.pas 2.3. 公共单元 uPub.pas 2.4. dll工程导出函 ...

  6. Fiddler的HTTPS基本配置 解决无法抓HTTPS包的问题

    Fiddler的HTTPS基本配置 解决无法抓HTTPS包的问题 PS:搜了好些,没一个能打的.还是让我来. 1. 基础安装,直接官网下载,一个exe,直接顺序点击安装好即可. https://www ...

  7. 马克斯cms无法下载HTTPS图片地址解决办法!

    maxcms4.0以后官方就没有更新了.现在https已经成为趋势,采集的资源站https图片无法下载到本地,那么怎么解决呢?参考:555影院修改. 马克斯无法下载HTTPS.图片解决方法: 找到网站 ...

  8. HTTP和HTTPS HTTPS为什么更安全?

    文章目录 HTTP和HTTPS HTTPS保证安全性的做法 1.混合加密机制,加密HTTP的通信内容 数字签名 实现数据完整性验证 使用数字证书证明身份 HTTP和HTTPS的区别 HTTP和HTTP ...

  9. 访问Oracle em https https://localhost:1158/em 报访问网页提示此网站的安全证书有问题解决方法

    访问Oracle em https https://localhost:1158/em 报访问网页提示此网站的安全证书有问题 因为ie10.ie11等对不安全的链接,管理更加严格,低安全级别,不能解决 ...

  10. 【思考】Docker到底解决了什么问题

    本文讲的是[思考]Docker到底解决了什么问题, [编者的话]作者之前是一位B2B行业的从业者,他从自己的角度出发,分析了Docker能够解决的问题.作者认为目前的B2B市场体量还是太小,但是随着D ...

最新文章

  1. 我也转发一个关于特斯拉的文章
  2. vue.js仿饿了么app---webpack配置项
  3. python3.7.2教程-python 3.7极速入门教程2 Hello与变量
  4. 不要使用字符串常量作为对象锁去同步代码
  5. 三菱gx软件初始化失败怎么解决_三菱PLC的常见问题大全!
  6. 几点建议,让Redis在你的系统中发挥更大作用
  7. [WPF系列]-Deep Zoom
  8. Linux系统电脑非正常关机之后可能出现在登录界面循环的情况
  9. 用curl发起https请求
  10. TSC条码打印机C#例程(tsclib.dll调用)
  11. docker部署webapp的例子
  12. PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization
  13. python必背代码-Python中期学者必看:让你的python代码更高效灵活
  14. python版本安装
  15. PS-elevenday-铅笔工具(颜色替换)
  16. 1114 Family Property (25 point(s)) PAT甲级
  17. 福禄克FLUKE网络光纤测试仪OFP2-100-Q CH系列
  18. JavaScript中的面向对象编程
  19. 1677. 发票中的产品金额
  20. Oracle gc等待事件的发现、处理与预防

热门文章

  1. [编织消息框架][JAVA核心技术]异常基础
  2. 通过ida dump Uinity3D的加密dll
  3. 移动开发平台-应用之星app制作教程
  4. 利用TreeView控件动态生成无限级树(续:通过绑定动态xml文件)(转)
  5. Kontakt 6 for Mac(强大的音频采样器软件)
  6. 智能翻译软件—人人译视界 for Mac
  7. Android基础之Intent的几种常用方法
  8. Vegas如何设置淡入淡出?
  9. ubuntu 18.04 安装 LNMP
  10. 【Flutter】flutter doctor 报错Android license status unknown. Run `flutter doctor --android-licenses‘