文章目录

  • HTTPS VS HTTP

  • HTTPS=HTTP+加密+证书+完整性保护

  • 加密

  • 对称加密

  • 非对称加密

  • 混合加密

  • 证书

  • 完整性保护

  • HTTPS并不能取代HTTP

  • SSL是把双刃剑

  • HTTPS的遗憾之处


HTTPS VS HTTP

计算机网络 (二) 应用层 :HTTP协议详解

在之前的文章中介绍了HTTP协议,虽然从中了解了他优秀的一面,但是也能看到他许多的不足。

由于其本身通信使用明文,没有进行加密,也没有确认通信方的一种机制,所以在互联网上近似于裸奔,很容易就会受到中间人攻击,导致安全存在问题。

通信时数据并没有进行加密,而是使用明文,很容易就会被窃听

没有验证通信对象的机制,导致了可能会有人假扮客户端进行通信

无法验证报文的完整性,中途可能被人篡改,自己又无法确认

HTTP的主要缺点如下

  • 通信使用明文,内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法验证报文的完整性,有可能遭到篡改

为了弥补上述缺点,HTTPS就诞生了,HTTPS并不是一个新的协议,而是身披SSL外壳的HTTP,通过引入加密,证书,完整性保护来保证了他的安全。


HTTPS=HTTP+加密+证书+完整性保护

加密

对称加密

对称密钥加密也叫做共享密钥加密,其实就是加密和解密采用了同一个密钥

双方在进行通信时,发送方会利用密钥进行加密,再将密钥一同发送给接收方,让其使用这个密钥进行解密。

这种方法看起来不错,但是也存在问题,如果在发送的时候被拦截下来,密钥就会泄露给中间人,此时中间人就可以通过密钥来对之后的数据进行解密,此时也就失去了加密的意义

这时,就引入了非对称加密


非对称加密

非对称加密又叫做公开密钥加密,他使用一对非对称的密钥,一把叫做私有密钥,一把叫做公有密钥。故名思意,共有密钥是公开的,任何人都可以获得,而私有密钥则不能让任何人知道

当进行通信时,发送方使用对方的公有密钥进行加密,而接收方接收时则使用自己的私有密钥进行解密,这样一来,用于解密的私钥就完全掌握在接收者自己手里,中间人也无法从中窃取密钥,安全也一定程度的得到了保障。


混合加密

但是,从上面的描述也可以看出来,由于非对称加密的处理比起对称加密来说较为复杂,所以如果在通信时一直使用非对称加密,就会导致通信的效率大大的降低,所以HTTPS采用对称加密和非对称加密并用的混合加密机制

具体怎么做呢?

  1. 使用非对称加密的方式来交换之后用来进行加密解密的对称加密密钥

    (因为对称加密的主要问题就是无法确保密钥是否安全,而此时采用非对称加密来传输密钥,就能很好的规避这个问题)
  2. 在确保之前交换安全的情况下,使用对称加密密钥来进行通信

    (而非对称加密的最大问题就在于其复杂的处理机制导致效率降低,所以在安全的情况下使用对称加密就可以大大提高效率)


证书

虽然数据得到了加密,不至于明文裸奔,但是这时以及安全了吗?

答案是否定的,我们还需要考虑到HTTP的第二个缺点,没有验证对象。

假设这样一个情景,小明和小张进行通信,中间人在双方第一次通信时就截获了小明的公钥,即使无法使用私钥解密,但是他仍然想出了一个坏点子——偷天换日,此时他冒充小明,将自己生成的公钥发送给小张。

此时小张误以为他就是小明,所以使用中间人的公钥进行加密,将对称加密的密钥发送了过去。

此时中间人就可以通过自己的私钥来进行解密,于是就获取了对称加密的密钥。之后他接着使坏——此时再伪装成小张,将密钥再一次加密后发送给小明,此时小明也认为他就是小张。

通过这种手法,中间人就能在双方都不知情的情况下,掌握了双方的对称加密密钥,轻松的截取了双方的通信内容。

为了解决这个问题,HTTPS引入了数字证书这一机制。

服务器的运营人员会向数字证书认证机构来进行认证,在机构对其验明身份之后,就会对服务器的公钥做一个数字签名,并且将公钥放入公钥证书后绑定在一起。

此时当客户端接收到服务器发送的公钥证书的时候,就会向证书认证机构来验证数字签名是否正确,来判断该公钥是否遭到替换,确保了公钥的真实性。

此时即使中间人想仿造公钥证书,但也因为无法通过机构的验证而被识破。

此时,中间人就没有使坏的空间了。

这就是HTTPS使用加密以及证书来确保安全的整个流程


完整性保护

在上面的流程中,应用层发送数据的时候会附加MAC报文摘要,MAC能够查知报文是否遭受到篡改,从而让保护报文的完整性。


HTTPS并不能取代HTTP

SSL是把双刃剑

HTTPS也叫做披着SSL外壳的HTTP,在通信接口部分他使用了SSL和TLS来进行代替。

对于HTTP协议来说,他直接和TCP进行通信。

而HTTPS为了保证安全,使用了SSL来提供保障,通信时首先与SSL进行通信,再由SSL来与TCP进行通信,正是因为由SSL的存在,才使得HTTP具备了HTTPS的加密、证书、安全性保障这些功能。

但是成也萧何,败也萧何,SSL为HTTPS保障安全的同时,也降低了他的效率

SSL主要慢在两个方面

  1. 和HTTP相比,网络负载可能会变慢2到100倍。由于HTTPS还需要额外进行SSL通信,整体上处理通信量不可避免的增加了。
  2. SSL为了确保安全,在客户端和服务端都需要进行大量的加密和解密的运算处理,导致其比起HTTP来说会更多的消耗服务器和客户端的硬件资源,导致负载增强。

HTTPS的遗憾之处

  1. SSL的高度安全带来的低效率以及高负载使得HTTPS并不会一直使用(或者干脆不用)

    (对于高访问量的Web网站来说,进行大量的加密解密出来带来的负载十分庞大,并且对于非敏感信息(可公开信息)也没有加密的必要,所以大多数网站并不会一直使用HTTPS,而是只在进行私密内容传输的时候才会使用,来确保资源的节约。)
  2. 数字证书的高昂成本使得个人网站及非盈利网站望而却步

    (要进行HTTPS通信,数字证书是必不可少的,但是对于一些非盈利的网站以及个人网站来说,每年用来购买数字证书带来的花销并不是一个小数目,所以大多还是继续使用HTTP

HTTP协议和HTTPS协议的那些事的更多相关文章

  1. http协议和https协议

    内容: 1.http协议介绍 2.https协议介绍 3.http协议和https协议对比 1.http协议介绍 (1)http协议是什么 1 一个传输协议,协议就是双方都遵守的规范. 2 为什么叫超 ...

  2. HTTP协议和HTTPS协议初探

    概况 HTTP是hypertext transfer protocol(超文本传输协议)的简写.它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEBserver之间交换数据的过程. HT ...

  3. 1.http 协议和 https 协议的原理

    首先,我们得知道应用层是 OSI 七层网络模型的第七层,不同类型的网络应用有不同的通信规则,因此应用层协议是多种多样的,比如 DNS.FTP.Telnet.SMTP.HTTP. 等协议都是用于解决其各 ...

  4. http协议和https协议的区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  5. Http协议和Https协议的安全性问题

    https://www.cnblogs.com/intsmaze/p/6009648.html https://blog.csdn.net/jeffleo/article/details/768630 ...

  6. Bytom BIP-32协议和BIP-44协议

    我们知道HD(分层确定性)钱包,基于 BIP-32:多币种和多帐户钱包,基于 BIP-44:最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就专门整理了一下该协议的内容 ...

  7. HTTP协议和SOCKS5协议

    HTTP协议和SOCKS5协议 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们平时上网的时候基本上是离不开浏览器的,尤其是搜索资料的时候,那么这个浏览器是如何工作的呢?用的又是 ...

  8. http协议及http协议和tcp协议的区别

    http是应用层的协议,并且无连接,无状态的协议. http协议的特点: 1.支持c/s模式 2.简单快速:客户端向服务器端传送数据的时候,只需要发送请求方法和路径,请求方法有:post,get,he ...

  9. Java基础之UDP协议和TCP协议简介及简单案例的实现

    写在前面的废话:马上要找工作了,做了一年的.net ,到要找工作了发现没几个大公司招聘.net工程师,真是坑爹呀.哎,java就java吧,咱从头开始学呗,啥也不说了,玩命撸吧,我真可怜啊. 摘要: ...

随机推荐

  1. MASA Framework - 整体设计思路

    源起 年初我们在找一款框架,希望它有如下几个特点: 学习成本低 只需要学.Net每年主推的技术栈和业务特性必须支持的中间件,给开发同学减负,只需要专注业务就好 个人见解:一款好用的框架应该是补充,而不 ...

  2. elasticsearch之拼音搜索

    拼音搜索在中文搜索环境中是经常使用的一种功能,用户只需要输入关键词的拼音全拼或者拼音首字母,搜索引擎就可以搜索出相关结果.在国内,中文输入法基本上都是基于汉语拼音的,这种在符合用户输入习惯的条件下缩短 ...

  3. RHCSA 第七天

    1.创建文件,并赋予权限611(两种方式,一种guoa,一种nnn) 2.创建目录,并赋予权限755(两种方式,一种guoa,一种nnn) 3.创建文件,并将文件的属主和属组修改其他用户 4.设置su ...

  4. 【分享】thanos receiver的grafana报表配置

    具体的部署是:用prometheus抓取thanos receiver的10909端口,然后grafana再请求这个prometheus 具体的JSON配置请见最后 本文的一些监控配置,参考了这篇文章 ...

  5. 搭服务器之kvm--vnc连接虚拟机连接闪退直接消失 以及virsh shutdown命令无效解决办法。

    之前暑期见识到了虚拟化在企业中的应用,感慨不小,以前只是自己在玩儿桌面vmware workstation,安装的虚拟机也没啥大感觉.在公司机房里大家用的dell poweredge 420,8gme ...

  6. Django db使用MySQL连接池

    Django db使用MySQL连接池 Sep 25 2016 Django db模块本身不支持MySQL连接池,只有一个配置CONN_MAX_AGE连接最大存活时间,如果WSGI服务器使用了线程池技 ...

  7. java-导入import

    1 package face_package; 2 3 import face_packagedemoA.DemoA; 4 import face_packagedemoB.DemoB; 5 //真正 ...

  8. Tomcat安装(启动)

    1,安装 找到你需要用的Tomcat版本对应的zip压缩包,解压到需要安装的目录即可 2,目录介绍 bin  存放tomcat服务器的可执行程序 conf  存放tomcat服务器的配置文件 lib  ...

  9. 用 CSS 让你的文字更有文艺范

    透明文字,模糊文字,镂空文字,渐变文字,图片背景文字,用 CSS 让你的文字也有 freestyle- 前言 我们做页面涉及字体的时候,最多就是换个 color 换个 font-family,总是觉得 ...

  10. Spring @SessionAttributes注解 @ModelAttribute注解

    一.@SessionAttribute详解 如果多个请求之间需要共享数据,就可以使用@SessionAttribute. 配置的方法: 在控制器类上标注@SessionAttribute. 配置需要共 ...