一、http的缺点

之前有介绍过http协议相关的一些知识,http是相当优秀和方便的,但它也有缺点,主要不足表现在如下几个方面:

△ 通信使用明文(不加密),内容可能会被窃听

△ 不验证通信方的身份,因此可能遭遇伪装

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

其他未加密的协议也存在这类问题

△ 某些特定web服务器和特定web浏览器存在安全漏洞

1、通信使用明文可能被窃听

http本身不具有加密功能,无法做到对通信整体(使用http协议通信的请求和响应内容)进行加密,即:http报文使用明文(未经加密的报文)方式传送

TCP/IP协议族的通信机制:通信内容在所有通信线路上都可能被窥视

应对措施:对通信进行加密处理防止被窃听

加密对象:

①.通信的加密

http协议没有加密机制,可以通过SSL(Secure Socket Layer:安全套接层)或TLS(Transport Layer Security:安全层传输协议)组合使用,加密http的通信内容,这就是常说的https(超文本传输安全协议)

②.内容的加密

http协议没有加密机制,对传输的内容本身进行加密,即报文实体主体部分;客户端对请求报文加密处理后传输,但前提是客户端和服务器都具有加密和解密机制,主要应用于WEB服务中(但仍然有被篡改的风险)

2、不验证通信方身份,可能遭遇伪装

http协议中请求和响应不会对通信方进行确认,即存在“服务器是否是发送请求中URI真正指定的主机。返回的响应是否真的返回到实际提出请求的客户端”等类似问题

任何人都可以发起请求,服务器只要接收到请求,不管对方是谁都会返回一个响应(仅限于发送端IP和端口号没有被WEB服务器设定限制访问的前提下)

http协议的隐患有以下几点:

①.无法确定请求发送至目标的web服务器是否是按真实意图返回响应的服务器;有可能是已伪装的服务器

②.无法确定响应返回到的客户端是否是按真实意图接受响应的那个客户端;有可能是已伪装的客户端

③.无法确定正在通信的对方是否具备访问权限;因为某些web服务器保存有重要信息,只发给特定用户通信的权限

④.无法判断请求来自何方

⑤.即使时无意义的请求也会接收,无法阻止海量请求下的D0S攻击(Denial of Service:拒绝服务攻击)

3、无法证明报文完整性,可能已遭篡改

完整性:指信息的准确度,若无法证明其完整性,意味着无法判断信息是否正确

http协议无法证明通信的报文完整性,因此,请求或者响应在传输过程中,如果遭到篡改,是无法知道的;类似这种请求或响应传输中被攻击者拦截篡改的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)

防止篡改:常用的方法有MD5和SHA-1等散列值校验的方法,以及来确认文件的数字签名方法

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

1、通常把添加了加密和身份认证机制的http协议称为https(HTTP Secure);证书可证明服务器或者客户端的身份

2、https相当于身披SSL外壳的http

https并非应用层的一种新协议,而是在http通信接口部分用SSL(Secure Socket Layer:安全套接字层)和TLS(Transport Layer Security:安全层传输协议)协议代替

通常,http和TCP直接通信,当使用SSL时,先由http和SSL通信,再由SSL和TCP通信

SSL是独立于http的协议,其他应用层的如SMTP何Telnet等协议都可以配合SSL进行使用

3、加密技术

SSL采用公开密钥加密(Public-key cryptography)的加密处理方式,加密方法中加密算法是公开的,但密钥是保密的,以保持加密方法的安全性(密钥用来对已经加密的内容进行解密)

加密和解密通用一个密钥的方式称为共享密钥加密(Common key crypto system),也称为对称密钥加密

公开密钥加密方式:

公开密钥加密使用一对非对称密钥,一把叫做私有密钥(private key),一把叫做公开密钥(public key)

过程:发送密文的一方使用对方公开的密钥进行加密,对方收到被加密信息后,使用自己的私有密钥进行解密(要想根据密文和公开密钥解密,理论上可以,但实际操作起来,非常困难)

HTTPS采用混合加密机制

https采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥可实现安全交换,则可能仅使用公开密钥加密(公开密钥加密相比共享密钥加密,速度较慢)

实际运用中应该合理运用两种加密机制的优势,组合起来进行通信(交换密钥环节利用公开密钥加密方式,建立通信交换报文阶段使用共享加密机制)

 

4、证书

由数字证书认证机构(CA:Certificate Authority)和其他相关机关颁发的公开密钥证书

处于客户端和服务器双方都可信赖的第三方机构立场,对通过申请的服务器公开密钥做数字签名,分配该公开密钥,将其与共钥证书绑定,然后服务器传给客户端,以进行公开密钥加密方式通信;

收到证书的客户端使用数字证书认证机构的公开密钥,对服务器证书的数字签名进行认证,然后明确2点:

①.认证服务器的公开密钥是真实有效的数字证书认证机构

②.服务器的公开密钥是指的信赖的

作用:

①.证明通信方的服务器是否规范

②.确认对方服务器背后运营的企业是否真实存在(拥有该功能的证书就是EV SSL证书:Extended Validation SSL Cetificate );特点:浏览器背景色是绿色的

5、HTTPS安全通信机制

HTTPS通信过程:

①.客户端发送Client Hello报文开始通信,报文中包含客户端支持的SSL指定版本、加密组件、列表等

②.服务器接收到请求报文时,在响应报文中包含SSL版本以及加密组件发送Server Hello(加密组件内容从接收到的客户端加密组件中筛选出来)

然后服务器发送Certificate报文,其中包含公开密钥证书

最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束

③.第一次握手结束,客户端Client Key Exchange报文回应,报文中包含通信加密中使用的一种名为Pre-master sercet的随机密码串(该报文已用上一步骤的公开密钥进行加密)

接着客户端你继续发送Change Cipher Spec报文,该报文提示服务器,在此报文之后的通信采用Pre-master sercet密钥加密

最后客户端发送Finished报文;该报文包含通信连接至今全部报文的整体校验值(这次握手能否成功,以服务器是否可以正确解密报文为判断标准)

④.服务器同样发送Change Cipher Spec报文

服务器同样发送Finisher报文

⑤.服务器和客户端Finished报文交换完成后,SSL连接完成,通信收到SSL保护,

⑥.应用层协议开始通信,即HTTP请求

⑦.最后由客户端断开连接;断开连接时,发送close_notify报文,然后发送TCP FIN报文关闭与TCP的通信

上面的通信过程中,应用层发送数据时会附加MAC(Message Authentication Code)报文摘要,MAC可查询报文是否遭受篡改,保护报文完整性

通信流程图(服务器公开密钥证书建立HTTPS的过程)

HTTPS使用SSL(Secure Socket Layer:安全套接字层)和TLS(Transport Layer Security:安全层传输协议)这两种协议

△ :使用SSL时,处理速度回变慢

①.通信慢:通信时候大量消耗CPU及内存资源,相比较HTTP而已,网络负载可能变慢2-100倍(通信量增加)

②.加密处理:在服务器和客户端都要进行加密和解密,更多的消耗了服务器和客户端硬件资源,导致负载增强

改善方案:使用SSL加速器(专用服务器),为SSL通信专硬件,可以提高数倍SSL计算你速度,仅在SSL通信处理时发挥作用,以分担负载

http协议(十一)http与https的更多相关文章

  1. 大前端学习笔记整理【七】HTTP协议以及http与https的区别

    前言 还是老样子,新博客开始前总是想先啰嗦几句...HTTP协议其实在当初学习java时老师就有提过...但是...反正就那么过去了... 这段时间公司的项目正好要求做https的转换和迁移,然后自己 ...

  2. Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置

    Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置 ============================== ©Copyright 蕃薯耀 2017 ...

  3. HTTPS-HSTS协议(强制客户端使用HTTPS与服务器创建连接)

    HSTS(HTTP Strict Transport Security)国际互联网工程组织IETE正在推行一种新的Web安全协议 HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接. ...

  4. HTTP协议的安全性--全站HTTPS

    HTTP Basic Authentication很容易让攻击者监听并获取用户名密码.使用Base64来encode用户名密码也只是为将用户名和口令中的不兼容字符转换为均与HTTP协议兼容的字符集. ...

  5. 通讯协议(二)HTTPS协议

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

  6. TCP/IP协议之http和https协议

    一.TCP/IP协议 TCP/IP 是不同的通信协议的大集合. 1.TCP - 传输控制协议 TCP 用于从应用程序到网络的数据传输控制. TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们 ...

  7. SSL协议、HTTP和HTTPS和区别

    SSL协议 SLL协议的握手过程 开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake). 第一步,客户端给出协议版本号.一个客户端生成的随机数(Clien ...

  8. https协议 和 Charles 进行https抓包原理

    本文转载自:https://blog.csdn.net/fox64194167/article/details/80387696 1.对称加密 其变成复杂的加密密文发送出去.收信方收到密文后,若想解读 ...

  9. tomcat服务器配置把Http协议强制转化为Https

    1)在命令提示符窗口,进入Tomcat目录,执行以下命令: keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass ...

  10. 解决Xcode7 iOS9苹果将原http协议改成了https协议问题

    在info.plist 加入key <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbi ...

随机推荐

  1. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  2. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  3. 再讲IQueryable<T>,揭开表达式树的神秘面纱

    接上篇<先说IEnumerable,我们每天用的foreach你真的懂它吗?> 最近园子里定制自己的orm那是一个风生水起,感觉不整个自己的orm都不好意思继续混博客园了(开个玩笑).那么 ...

  4. 06.SQLServer性能优化之---数据库级日记监控

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 之前说了一下数据库怎么发邮件:http://www.cnblogs.com/duniti ...

  5. 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划

    发个通知,过段时间学习计划相关的东西就出来了,上次写了篇指引文章后有些好奇心颇重的人跟我说:“发现最近群知识库和技能库更新的频率有点大,这是要放大招的节奏啊!” 很多想学习却不知道如何规划的人想要一个 ...

  6. 虚拟dom与diff算法 分析

    好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM

  7. Android ViewPager打造3D画廊

    本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 网上有很多关于使用Gallery来打造3D画廊的博客,但是在关于Gallery的官方说法中表明: This cl ...

  8. PHP与JAVA构造函数的区别

    早期的PHP是没有面向对象功能的,但是随着PHP发展,从PHP4开始,也加入了面向对象.PHP的面向对象语法是从JAVA演化而来,很多地方类似,但是又发展出自己的特色.以构造函数来说,PHP4中与类同 ...

  9. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...

  10. js从数组中随机取出不同的元素

    前言 上午处理个需求需要从一个总数组中随机取出不同的元素.共使用两个方法.第一种方法较常规,经测试有bug,数据量大以后随机几次返回的对象直接是function而不是object. 当然简单数据类型应 ...