zoukankan      html  css  js  c++  java
  • HTTPS

    一.HTTP协议
    HTTP的缺点:
    • 通信使用明文(不加密),内容可能被窃听;
    • 不验证通信方的身份,有可能遭遇伪装;
    • 无法证明报文的完整性,有可能被篡改。
     
    1.通信使用明文可能会被窃听
    TCP/IP是可能被窃听的网络
     
    加密处理防止被窃听
    1)通信的加密
    http协议和SSL或TLS组合使用,即HTTPS,用SSL建立安全通信线路,再进行HTTPS通信。
    2)内容的加密
    对报文主题加密,通信本身是不加密的。客户端和服务器同时具备加密和解密机制。通信线路不安全,内容仍有u被篡改的风险。
     
    2.不验证通信方的身份可能遭遇伪装
    任何人都可发起请求
     
    查明对方的证书
    SSL不仅提供加密处理,而且还用证书验证对方。客户端通信之前先确认服务器的证书,验证通过才会继续通信。证书由值得信赖的第三方机构颁发。
     
    3.无法证明报文的完整性,可能已被篡改
    接收到的内容可能有误。
    请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(MITM)。
     
    http协议如何防止被篡改
    常用的是MD5和SHA-1散列值校验的方法,以及用确认文件的数字签名方法(例如用PGP(完美隐私)创建的数字签名)。但是这些方法无法保证结果的正确,因为PGP和MD5本身被改写是很难被用户察觉的。
    此时,有必要使用HTTPS,SSL提供认证和加密处理及摘要功能。
     
    二.HTTP+加密+认证+完整性保护=HTTPS
    1.HTTP加上加密处理和认证以及完整性保护后就是HTTPS
     
    2.HTTPS是带有SSL外壳的HTTP
    HTTPS只是HTTP通信接口部分用SSL和TLS协议代替而已。通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。SSL协议是在HTTP协议和TCP中间的一层协议。
     
    学习SSL之间,先来学习加密方法。
    3.相互交换密钥的公开密钥加密技术(公钥加密)
    1)共享密钥加密的困境:
    加密和解密用同一个密钥的方式称为共享密钥加密,也称为对称密钥加密。用对称密钥加密时必须将密钥也发送给对方。发送密钥的过程容易被窃听,从而丢失密钥。
    2)使用两把密钥的公开密钥加密
    使用一对非对称的密钥,私有密钥和公开密钥。发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私钥进行解密。存在密钥的传送,所以是安全的。
    3)HTTPS采用混合加密机制速度慢。所以应充分利用各自的优势,在交换密钥环节使用公钥加密,之后的建立通信交换报文阶段使用共享密钥加密。
     
    4.证明公开密钥正确性的证书
    公开密钥加密的问题:无法验证公开密钥本身就是真实的公开密钥。为了解决这个问题,可以使用由数字证书认证机构(CA)和其相关的机关颁发的公开密钥证书。服务器会将这份数字证书认证机构颁发的公钥证书发给客户端,以进行公开密钥加密通信。
     
    5.HTTPS的安全通信机制
     

    步骤1: _客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。

    步骤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)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整性。

     
    HTTPS在使用SSL协议时,它的处理速度会变慢。一种是指通信过程变慢,另一种是指由于大量消耗CPU和内存等资源,导致处理速度变慢。因为HTTPS需要做服务器、客户端双方加密和解密处理,因此会消耗CPU和内存等硬件资源。和HTTP通信相比,SSL通信部分消耗网络资源。而SSL通信部分又因为要对通信进行处理,所以时间上有延长了。
    因此,如果是非敏感信息则使用HTTP通信,只有在包含个人敏感信息时才利用HTTPS加密通信。
     
     
     
     
     
  • 相关阅读:
    树洞留言板~
    异常The following attributes are mutually exclusive: asproute aspcontroller, aspaction asppage, asppagehandler
    持续交付:发布可靠软件的系统方法
    sql分页遍历出现重复数据原因与解决方案
    jenkens2权威指南
    timer
    window10、window11连接局域网共享打印机失败处理办法
    解决“Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足……”
    ts在项目中的使用三斜线引入 与 import区别
    vue unshift渲染遇到的坑
  • 原文地址:https://www.cnblogs.com/xujiming/p/5463593.html
Copyright © 2011-2022 走看看