http协议基础(十一)http与https
一、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通信处理时发挥作用,以分担负载。
扩展阅读:美图HTTPS优化探索与实践
http协议基础(十一)http与https的更多相关文章
- (转) HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)
HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手.TCP/IP协议基础.加密学) 原文:http://blog.csdn.net/itermeng/article/detai ...
- HTTPS协议详解(一):HTTPS基础知识
HTTPS基础知识:HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息. ...
- TCP/IP协议基础(转)
转自 http://www.chinaunix.net 作者:Bernardus160 发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...
- 小白日记27:kali渗透测试之Web渗透-Http协议基础,WEB
Http协议基础 Web技术发展[http://www.cnblogs.com/ProgrammerGE/articles/1824657.html] 静态WEB[网页] 动态WEB 属于一种应用程序 ...
- 【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识
第41章 HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...
- 小白学习安全测试(一)——Http协议基础
Http协议基础 Web技术发展[http://www.cnblogs.com/ProgrammerGE/articles/1824657.html] 静态WEB[网页] 动态WEB 属于一种应用程序 ...
- HTTP/TCP协议基础
HTTP协议 基本概念 HTTP协议(超文本传输协议 HyperText Transfer Protocol):是用于从WWW服务器传输超文本到本地浏览器的传送协议.它不仅保证计算机正确快速地传输超文 ...
- 通过四个问题了解HTTP协议基础
很多人都知道学习和理解HTTP协议的重要性及必要性,但HTTP相关知识对计算机基础较差,尤其是我这种没有计算机基础的人来说更是晦涩难懂 乘着最近有空闲时间,开始恶补HTTP相关基础知识,下面请跟着我通 ...
- TLS握手协议分析与理解——某HTTPS请求流量包分析
https://xz.aliyun.com/t/1039 HTTPS简介 HTTPS,是一种网络安全传输协议,在HTTP的基础上利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护 ...
- 协议基础:SMTP:使用Telnet学习SMTP协议
协议基础:SMTP:使用Telnet学习SMTP协议 2018-07-30 20:05:50 liumiaocn 阅读数 7479更多 分类专栏: 工具 Unix/Linux 版权声明:本文为博主 ...
随机推荐
- jQuery的parseHTML方法
// data html字符串 // context 如果指定了context,则碎片将在此范围内被创建,默认是document // keepScripts 如果是true,则将有scr ...
- 23种设计模式之单例模式(Singleton)
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法. public class SingleTon { private static Si ...
- h5页面弹窗滚动穿透的思考
可能我们经常做这样的弹窗对吧,兴许我们绝对很简单,两下搞定: 弹窗的页面结构代码: <!-- 弹窗模块 引用时移除static_tip类--> <div class="ma ...
- numpy中的reshape中参数为-1
上篇文章中的reshape(-1,2),有的时候不明白为什么会有参数-1,可以通过查找文档中的reshape()去理解这个问题 根据Numpy文档(https://docs.scipy.org/doc ...
- pandas numpy处理缺失值,none与nan比较
原文链接:https://junjiecai.github.io/posts/2016/Oct/20/none_vs_nan/ 建议从这里下载这篇文章对应的.ipynb文件和相关资源.这样你就能在Ju ...
- CBV之详解
一,CBV,基于反射实现根据请求方式不同,执行不同的方法. 1. 开发模式 - 普通开发方式(前后端放在一起写) - 前后端分离 2. 后端开发 为前端提供URL(API/接口的开发) 注:永远返回H ...
- Python内置函数之isinstance,issubclass
isinstance判断一个变量的类型 >>> n1 = 10>>> isinstance (n1,int)True 判断n1是否是数字类型,如果是返回True如果 ...
- java 中方法的重写
方法的重写 1.在子类中可以根据需要对从基类中继承来的方法进行重写. 2.方法重写必须要和被重写方法具有相同方法名称.参数列表和返回类型. 3.重写方法不能使用比被重写方法更严格的访问权限 4.注意与 ...
- C++中引用与取地址
所谓引用就是为对象起一个别名.例如变量b = &a,b就是a的一个引用.对b的任何操作等同于对a的操作,也就是说,如果你改变了b的值,同时a的值也会发生改变.b就是a的另外一个名字,他们实质是 ...
- MySQL NDB集群安装配置(mysql cluster 9.4.13 installation)
一.安装前规划 1.安装软件版本:mysql-cluster-gpl-7.4.13-linux-glibc2.5-x86_64.tar.gz 2.安装规划: 主机名 Ip地址 角色 db01 192. ...