博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP基础知识(七)
阅读量:5947 次
发布时间:2019-06-19

本文共 2924 字,大约阅读时间需要 9 分钟。

 
 
七、确保Web安全的HTTPS
 
1、HTTP的缺点
  (1)通信使用明文(不加密),内容可能会被窃听
因为按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭受到窥视。即使已经过加密处理的通信,也会被窥视到通信内容,这点和未加密的通信时相同的。(使用抓包工具就可以获取HTTP协议的请求和响应的内容,并对其进行解析)
加密的方式:
1)通信的加密
HTTP协议可通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。
与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP over SSL
2)内容的加密
即把HTTP报文里所含的内容尽心加密处理。为了做到有效的内容加密,而且要求客户端和服务器同时具备加密和解密机制。
 
  (2)不验证通信方的身份,因此有可能遭遇伪装
在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。
隐患:
1)无法确定请求发送至目标的Web服务器是否按真实意图返回的那台服务器。有可能是已伪装的Web服务器。
2)无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。
3)无法确定正在通信的对方是否具备访问权限。因为某些服务器上班保存着重要的信息,只想发给特定用户通信的权限。
4)无法判定请求是来自何方、出自谁手
5)即使是无意义的请求也会照单全收。无法阻止海量请求下的DOS攻击(Denial of Service,拒绝服务攻击)
措施:
查明对方的证书
使用SSL可以确定通信方,不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。
证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。
客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。
 
  (3)无法证明报文的完整性,所以有可能已遭篡改
由于HTTP协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。(没有办法确认发出的请求/响应和接收到的请求/响应是前后相同的。)
请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击成为中间人攻击(Man-in-the-Middle attack,MITM)
措施:
常用的是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。
提供文件下载服务的Web网站也会提供响应的PGP(Pretty Good Privacy,完美隐私)创建的数字签名及MD5算法生成的散列值。
但是PGP和MD5本身呗改写的话,用户是没有办法意识到的。
 
2、HTTP+加密+认证+完整性保护=HTTPS
使用HTTPS通信时,改用https://,是身披SSL外壳的HTTP。使用SSL时,HTTP先和SSL通信,再由SSL和TCP通信。
SSL是独立于HTTP的协议,许多运行在应用层的协议均可配合SSL协议使用,SSL是当今世界上应用最为广泛的网络安全技术。
  (1)相互交换密钥的公开密钥加密技术
SSL采用一种叫公开密钥加密(Public-key crytography)的加密处理方式。即加密和解密都会用到密钥,没有密钥就无法对密码解密。
加密和解密同用一个密钥的方式称为共享密钥,也叫对称密钥加密。但是这种共享密钥的方式必须将密钥发给对方,如果通信被监听就可能会落入攻击者之手,失去了加密的意义。
公开密钥方式很好地解决了共享密钥加密的困难。它使用一对非对称的密钥,一把是私有密钥,另一把是公开密钥。公开密钥加密,私有密钥解密,过程中无需发送私有密钥,不会被盗走。
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。
 
  (2)证明公开密钥正确性的证书
公开密钥加密方式无法证明本身是货真价实的公开密钥。未解决此问题,可用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。
数字证书认证机构的业务流程:
1)服务器运营人员向机构提出公开密钥的申请;
2)机构判明提出申请者的身份;
3)机构对申请的公开密钥做数字签名,将该公开密钥放入公钥证书后绑定在一起
证书的一个作用是用来证明作为通信一方的服务器是否规范,另外一个作用是可确认对方服务器背后运营 的企业是否真实存在。拥有该特性的证书就是EV SSL证书
 
  (3)HTTPS的安全通信机制
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连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。
11)应用层协议通信,即发送HTTP响应。
12)最后由客户顿断开连接。断开连接时,发送close_notify报文。这步之后再发送TCP FIN报文来关闭与TCP的通信。
 
  应用层发送数据时附加一种叫做MAC(Message Authentication Code)的报文摘要。能够差值报文是否遭到篡改,从而保护报文的完整性。
  但是当使用SSL时,处理速度会变慢。一是通信慢,一是由于大量消耗CPU及内存等资源导致处理速度变慢。所以并不是所有的Web网站不一直使用HTTPS,访问量大的网站在进行加密处理时会承担大量的负载。而且HTTPS所使用的证书必须向认证机构购买,这也是网站需要考虑到的因素。
 
 
这里搜集了一些大神的贴子:

转载于:https://www.cnblogs.com/CTXXCH/p/6526708.html

你可能感兴趣的文章
android ant Compile failed; see the compiler error
查看>>
ios webView 加载pdf
查看>>
PHP开源订餐系统
查看>>
Single Number
查看>>
linux分区问题
查看>>
MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除
查看>>
Maven构建web项目在Eclipse中部署的几种方法
查看>>
[多文件上传三]利用UrlEncodedFormEntity表单实现
查看>>
左边邮件类型
查看>>
怎么能确保分类中的方法不和原始类的方法冲突?
查看>>
Python-pip, RubyGems, node-npm使用国内镜像加速下载
查看>>
C 语言静态变量的作用域和生存周期(ZZ)
查看>>
C++是可以在类里面定义和类名相同的变量的
查看>>
Linux socket 编程中 write 函数使用的注意事项
查看>>
eclipse开发环境
查看>>
如何计算硬盘、RAID组与Ceph的IOPS!!!
查看>>
18至今,学习Linux让我快速成长的三件事
查看>>
keepalived+nginx搭建高可用几个注意点
查看>>
pyinstaller 打包后运行错误
查看>>
一步一步学Ruby(十六):符号
查看>>