从HTTP的安全问题到HTTPS

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在说HTTPS之前,我们先说说HTTP通信过程中的一些问题风险

无加密处理的HTTP

HTTP为我们的网络通信带来了很多益处,但HTTP同样也有它的缺点,我们知道,HTTP是一个未加密的协议,所以在传输过程中,它有可能遇到以下风险

1. 窃听风险

通信使用明文(不加密),内容可能会被窃听
事实上,即使是已经加密了的通信,也会被窥视到通信内容,只是通过加密处理,别人可能无法得知传输内容的真实信息
窃听相同段上的通信,只需要手机在互联网上流动的数据包(帧)就行了。对于收集来的数据包的解析工作,课交给那些抓包或嗅探器工具。比如Wireshark,相关的抓包原理可见wireshark学习笔记----抓包网络原理

加密处理防止窃听

目前如何解决窃听风险的几种对策中,最为普及的就是加密技术了。

通信的加密

一种方式是将通信加密,虽然HTTP没有加密处理,但我们可以通过和SSL(Secure Socket Layer 安全接套层)或TLS(Transport Layer Security 安全传输协议)的组合使用,加密HTTP的通信内容

内容的加密

除了对通信的过程进行加密外,我们也可以对内容来进行一个加密。其实这就像一种翻译,只要能窃听到你通信内容的人都看不懂你写的这种语言,而接受内容的人懂,那就不怕内容会被窃听了。所以这种内容的加密,要求客户端和服务器端双方都同时具备加密和解密机制。

但由于只是对内容进行加密,所以不同于通信加密,在传输过程中还是有被篡改的风险的。

2. 冒充风险

不验证通信方的身份,因此有可能遭遇伪装
在HTTP通信时,由于不存在确认通信方的步骤,所以任何人都可以发起请求。而服务端只要接受到请求,不管是谁发出的,都会返回一个响应。

这样的做法,就导致了以下的问题

  • 客户端发起的请求,无法确认是否真的发送到想要发送到的服务器那里,有可能是冒充的服务器返回给给客户端响应
  • 无法确定返回的响应是否真的返回给了正确的客户端,可能会被返回到冒充的客户端
  • 无法确定正在通信的对方是否具备访问权限,因为部分Web服务器上保存着重要的信息,只想发给特定的用户通信的权限。
  • 无法判断请求是谁发出的
  • 即使是无意义的请求也会照单全收,无法阻止海量请求下的DoS攻击(Denial of Service,拒绝服务攻击)

通过SSL提供证书

虽然使用HTTP协议无法确定通信方,但如果使用SSL则可以。SSL不仅有我们上面提到的通信加密处理,还提供了证书,可用于确定通信方。
证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。从技术角度上来说,伪造证书是很困难的,所以基本上只要我们能够确认通信方持有的证书,即可判断通信方的真实意图。
在http状态码中,401就是用来表示需要提供证书但没有证书的错误

3. 篡改风险

无法证明报文的完整性,所以有可能已经已遭篡改

由于HTTP无法证明报文的完整性,所以如果在客户端发送请求到服务端和服务端接受到请求报文这段时间内,或者是服务端返回响应报文到客户端获得响应报文的这段时间内,报文内容被修改了,HTTP是无法得知的。
这种从中间的这段时间拦截并篡改内容的攻击叫做中间人攻击(Man-in-the-Middle attack,MITM)

跟上面两种风险的解决方式一样,这里我们仍要使用到SSL。在使用SSL协议时,会在应用层附加一种叫做MAC的报文摘要,MAC能够查知报文是否遭到篡改,从而保护报文的完整性。

HTTPS对于风险的处理

在《图解HTTP》中有这么一条等式

HTTP+加密+认证+完整保护 = HTTPS

可以从这条等式看出,HTTPS实际上就是用来解决上面提到过的那些风险的,那么具体是怎么做到的呢,我们先简单认识以下SSL/TLS协议

SSL/TLS协议

我们知道,HTTPS是基于SSL/TLS协议之上的,不使用SSL/TLS协议的HTTP通信,即不加密的通信,所有的信息在传输的时候都会以明文的形式进行一个传输,那么就会带来以下风险
SSL/TLS协议为了解决以上风险,希望达到

    1. 所有信息都是加密传输,第三方无法窃听
    1. 具有校验机制,一旦发生更改,传输双方都能发现
    1. 配备身份证书,防止身份被冒充

相互交换密钥的公开密钥加密技术

SSL采用一种公开密钥加密的加密处理方式
近代的加密方法中加密算法是公开的,而密钥是保密的,也就是说公开了上锁的方法,但是开锁的钥匙藏起来了,通过这种方式来保持加密方法的安全性

共享密钥加密(对称加密)的困境

在密钥加密技术中,我们将加密和解密共用一个密钥的方式称为共享密钥加密,也被称为对称密钥加密

使用对称加密必须将密钥也发送给对方,但这就涉及到一个问题,我们如何将密钥发送给对方,如果直接发送,那密钥就可能被别人监听获取,那别人也就可以对信息进行加密解密,加密就变得没有意义了

而如果我们能做到安全地发送密钥了,那说明数据也可以安全发送了,那又何必发送密钥来加密呢

使用两把密钥的公开密钥加密

为了解决上面的问题,我们可以采用非对称密钥加密,使用两把密钥,一把私有密钥,一把公有密钥。

所谓私有,自然就是不能被他人知道的,而公有密钥,是每个人都能知道的。使用公开密钥加密方式,发送密文的以方使用对方的公开密钥进行加密,对方收到被加密的信息后,再使用自己的私有密钥进行解密。

简单来说,就是一个锁,我们可以用公有的钥匙上锁,但是打开却只能用特有的一把私有的钥匙打开,只要自己不把私有的钥匙交出去,别人就无法去打开这个锁。

回到网络中,使用非对称加密,一开始由接收信息的一方,将公开密钥交给发送信息的一方,发送信息的一方使用该公开密钥对要发送的信息进行一个加密,发送给接收方,接收方再使用自己的私有密钥对信息进行解密,获取真正的内容。

这个方法的安全实现,需要一个技术上的不支持,那就是无法或者很难通过公开密钥和加密后的信息推导出原信息,否则公开密钥是所有人都能拿到的,而加密后的信息在传输过程中是可能被监听的,可以推导的话这个加密方法也显得不安全了。

好在要想根据密文和公开密钥,恢复到信息原文是异常困难的。在《图解HTTP》中就说到了

因为解密过程就是在对离散对数进行求职,这并非轻而易举就能办到。退一步讲,如果能对一个非常大的整数做到快速地因式分解,那么密码破解还是存在希望的。但就目前的技术来看是不太现实的。

HTTPS采用混合加密机制

虽然我们使用非对称的加密比起对称加密来说更为安全,但是非对称加密比起对称加密来说,消耗的时间更多,为了整合两者的优点,我们结合这两种方式来完成信息传输,这里会用到三把密钥,非对称加密的两把密钥,一把私有,一把公有,以及对称加密的一把公有密钥

我们知道,对称加密的问题就在于,我们无法保证公开密钥不会被他人知道,而通过使用非对称加密,我们可以讲公开密钥安全地交给发送方

所以,混合机密机制就是,在一开始通过使用非对称加密,将对称加密要用到的公开密钥交给发送方,然后后面的信息传递,都使用对称加密来对信息进行加密,这样后面的信息传递在加密这部分消耗的时间就会比较小,又通过非对称加密,保证了公开密钥的安全传输。

证明公开密钥正确性的证书

虽然我们上面采用的混合加密机制看起来好像已经足够安全了,但存在一个问题,我们如何确定一开始给我们发送对称加密时要用到的公开密钥的那个服务器,就是我们最终要连接的那个服务器呢。有可能在发送公开密钥的时候,发送密钥的这个服务器就是别人伪造的。

为了解决上面这个问题,可以使用由数字证书认证机构和其相关机关颁发的公开密钥证书。

数字证书认证机构出于客户端与服务器双方都可信赖的第三方机构的立场上,在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。

所以,除了上面的混合加密机制中说到的步骤外,服务器还应将这份由数字证书认证机构办法的公钥证书发送给哭护短,以进行公开密钥加密方式通信。而接收到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确认证服务器的公开密钥时真实有效的数字证书认证机构,且服务器的公开密钥时值得信赖的。

整体步骤:

  1. 服务器把自己的公开密钥登录至数字证书认证机构
  2. 数字证书认证机构用自己的私有密钥向服务器的公开密码部署数字签名并颁发公钥证书
  3. 服务器将公开密钥和数字证书认证机构的数字签名发送给客户端
  4. 客户端拿到公钥证书后,使用数字证书认证机构的公开密钥想数字证书认证机构验证公钥证书上的数字签名后,以确认服务器的公开密钥真实性
  5. 客户端使用服务器的公开密钥对报文进行加密后发送
  6. 服务器用私有密钥对加密信息进行解密

HTTPS的安全通信机制

  1. 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表
  2. 服务器可进行SSL通信时,会以Server Hello报文做为应答。和客户端一样,在报文中包含SSL版本以及加密组件。
  3. 之后服务器发送Certificate报文。报文中包含公开密钥证书。
  4. 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
  5. SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。
  6. 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
  7. 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能成功,要以服务器是否能够正确解密该报文做为判定标准。
  8. 服务器同样发送Change Cipher Spec报文。
  9. 服务器同样发送Finished报文。
  10. 服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。从此处开始,进行应用层协议的通信,即发送HTTP请求。
  11. 最后由客户端断开连接。

HTTPS的缺点

HTTPS带来安全性的同时,不可避免地带来了一些缺点,最显著的,就是由于增加了很多额外的操作,导致处理速度变慢。

当HTTPS使用SSL时,有两个方面会导致处理速度变慢

  1. 需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源。
  2. 和HTTP通信相比,SSL通信部分消耗网络资源。而SSL通信部分,又因为要对通信进行处理,所以时间上又延长了。

在《图解HTTP》中提到

针对速度变慢这一问题,并没有根本性的解决方案,我们会使用SSL加速器这种(专用服务器)硬件来改善问题。

除了速度变慢外,我们还需要去向认证机构购买使用的证书,而实际上,我们的一些个人网站完全没必要去做这样的安全性考虑,为这种意义不大的安全性考虑而花费经济,显然是不合算的。

参考文章:
https://developers.weixin.qq.com/community/develop/article/doc/000046a5fdc7802a15f7508b556413
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

参考书籍:
《图解HTTP》

httphttps请求报错处理 httphttps请求报错处理问题方案 问题 方案 在需要https的页面增加头信息 <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> 自动将http的不安全请求升级为https 阅读详情

相关推荐

https 跳转 http referrer_涨知识:HTTP 规范中的暗坑知多少?

HTTP 协议可以说是开发者最熟悉的一个网络协议,「简单易懂」和「易于扩展」两个特点让它成为应用最广泛的应用层协议。虽然有诸多的优点,但是在协议定义时因为诸多的博弈和限制,还是隐藏了不少暗坑,让人一不小心就会陷入其中。本文总结了 HTTP 规范中常见的几个暗坑,希望大家开发中有意识的规避它们,提升开发体验。1.RefererHTTP 标准把 Referrer 写成 Referer(少些了一个 r)...

weixin_39563132的博客 7870

谷歌浏览器提示表单不安全的解决方法

经过排查发现,正常访问网站时,采用的协议为https。打开有问题的页面时,协议为http。谷歌浏览器版本为131,因此谷歌浏览器会认为使用了http协议的网站为不安全网站,因此跳出不安全提示。参考【https://www.helpnetsecurity.com/2020/08/18/chrome-insecure-forms/】在访问系统其它功能是正常的,突然点进某个功能页面,谷歌浏览器提示 【表单不安全、您即将提交的信息不安全、由于系统正在使用不安全的连接提交此表单,他人将能看到您的信息】

weixin_40561490的博客 7295

HTTP切换到HTTPS的完整指南

现在HTTPS是每个网站的必备条件:用户在提供详细信息时希望他们的信息是安全的; Chrome和Firefox将那些有提交表单页面但是不是HTTPS的网站明确标记为不安全的; 这是一个SEO排名因素 ; 一般而言,这对用户隐私有严重的影响。其实,现在有很多方法可以让你免费获取HTTPS证书,所以切换到HTTPS只是一个你愿不愿意的问题。   设置HTTPS对于没有经验的用户可能有点吓人 - ...

GBin1中文互联 4628

网站从http换成https导致原http请求发不出去的解决办法

https方式请求http

Y13349887034的博客 1819

关于HTTPHTTPS安全问题

关于HTTPHTTPS安全问题     普通HTTP请求存在的问题         HTTP 本身是明文传输的,没有经过任何安全处理。例如用户在百度搜索了一个关键字,比如“苹果手机”,中间者完全能够查看到这个信息,并且有可能打电话过来骚扰用户。也有一些用户投诉使用百度时,发现首页或者结果页面浮了一个很长很大的广告,这也肯定是中间者往页面插的广告内容。如果劫持技术比较低劣的话,用户...

yjc0403的博客 699

HTTPS如何解决HTTP存在的安全问题

目录 前言 一、HTTPS 二、加密算法 1、对称加密 对称加密引发的安全问题 2、非对称加密 非对称加密的安全问题 3、对称加密与非对称加密结合 对称加密与非对称加密结合引发的安全问题 三、CA 1、证书的签发过程 四、HTTPS通信过程 前言 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议

渗透之路,攻防之间皆学问 3280

解决HTTPS访问http安全问题

问题:解决HTTPS访问http安全问题 解决方案: 1,在前台页面head中添加下面标签: 2,将引用的css或js都直接改写成https的 。或者不改,上面属性会自动升级为https协议下 这个问题解决了,出现其他问题。如下图: 解决方案: 1.在浏览器上打开此链接,如下图: 2.点击高级,继续访问。就可以了 ...

小邯韩的博客 3636

《深入浅出HTTPS​​​》读书笔记(3):HTTP本身的安全问题

提供WiFi网络的攻击者可以截获所有的HTTP流量,而可怕的是HTTP流量本身是明文的,攻击者用肉眼就可以知道用户的密码、银行卡信息、浏览习惯,根本不用进行任何的分析就可以获取用户的隐私。HTTP安全问题主要是这三点导致的,而解决的办法就是使用HTTPS,在理解的时候,一定要明白HTTPS是如何解决这三个核心问题的。所谓中间人就是在客户端和服务器通信之间有个无形的黑手,而对于客户端和服务器来说,根本没有意识到中间人的存在,也没有办法进行防御。安全问题主要有三点原因,这三点也是安全领域的根本问题

earthzhang2021的博客 636

深入浅出HTTP/HTTPS和网络安全HTTP/HTTPS的工作原理和常见的网络安全问题,如XSS、CSRF、SQL注入等

深入浅出HTTP/HTTPS和网络安全HTTP/HTTPS的工作原理和常见的网络安全问题,如XSS、CSRF、SQL注入

哎 你看的博客 875

解决Mixed Content: The page at..HTTPS中包含http的不安全问题

解决方法: 第一种:查看http的文件,放到https路径中,引入方式添加https 第二种 页面的head中加入:<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">意思是自动将http的不安全请求升级为https (注意尽在需要的地方引入) 结合第一二种一起解决 ...

盏茶作酒的博客 3万+

httphttps混搭可能导致安全风险提示问题

如果你的页面之中,使用http访问,但页面内容又包含了https的引用,则在浏览器中,可能会导致一个风险提示,例如:在IE8下,提示“该页面正在访问其控制范围之外的信息。这可能导致安全风险。是否继续? 最近在开发一个前台系统的时候遇到这个问题,这里先暂时做下记录,方便后续遇到同类问题可以查证。 解决方法: 1、客户端可以将浏览器的安全设置级别放低一些,不会提示。 2、服务器端,将web服务

werflychen的专栏 2518

vue前端开发ios系统:httpshttp请求 网络通讯之间的安全问题

httpshttp之间通讯的安全问题

zsq199771的博客 2003

由php的get post request 想到的安全问题(二)httpshttp ssl

在URL前加https://前缀表明是用SSL加密的。你的电脑与服务器之间收发的信息传输将更加安全。 Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。 httphttps使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议  要比http协议安全 HTTPS

502

(chap7 确保WEB安全HTTPS) HTTP通信问题

图解HTTP (chap7 确保WEB安全HTTPS) HTTP通信问题 HTTP的三个缺点:传输内容可能被窃听、无法验证双方的身份、传输内容可能被篡改。 无法确定请求发送至目标的Web 服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器。 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。 无法确定正在通信的对方是否具备访问权限。因为某些Web 服务器上保存着重要的信息,只想发给特定用户通信的权限。 无法判定请求是来自何方、出自谁手。即

thefist的专栏 435

为什么HTTPSHTTP安全?

近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。 读完本文,希望你能明白: HTTP通信存在什么问题 HTTPS如何改进HTTP存在那些问题 HTTPS工作原理是什么 想阅读更多优质文章...

a15732111571的博客 223

HTTPS解决安全问题

HTTPS(HyperText Transfer Protocol Secure)是一种安全的通信协议,用于在计算机网络上安全地传输超文本(如网页、图像、视频等)和其他数据。它是 HTTP 协议的安全版本,通过使用加密技术来保护通信的安全性和隐私性。HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题HTTPS 则解决 HTTP安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。

hhj25802580的博客 1383

HTTPHTTPS:从不安全安全的蜕变之路

HTTP(超文本传输协议)和 HTTPS(超文本传输安全协议)是网络上最常用的协议,它们为网页浏览、数据传输提供基础支持。虽然只有一字之差,但 HTTPS 却对 HTTP 做出了巨大的改进,尤其在安全性方面。本文将详细介绍 HTTPHTTPS 的区别,HTTPS 如何改进 HTTP,以及这些改进背后的原因和好处。HTTP 最早由蒂姆·伯纳斯-李(Tim Berners-Lee)于 1991 年提出,目的是传输超文本数据,设计之初的 HTTP 十分简单,专注于数据传输,但没有考虑安全性。随着互联网的发展

萌萌白白的博客 1466

apache http自动跳转https_关于百度APP限制HTTPS页面自动下载http文件的通知

在早些年的时候,网站的访问及传输基本用的都是HTTP协议,HTTP协议虽然使用极为广泛, 但是却存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付, 网络交易等新兴应用中安全方面最需要关注的。于是,HTTPS协议便产生了,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传...

weixin_39984442的博客 621
上一篇: 在两场vue conf后谈谈vue3.0要更新的内容相关笔记
下一篇: 在React中如何判断组件是函数还是类
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值