admin 管理员组

文章数量: 887006

HTTPS协议基础知识

HTTP协议存在的安全问题

  • 通信协议使用明文传输,内容有被窃听的风险
  • 不验证通信方的身份,可能遭遇伪装的通信方
  • 无法证明报文的完整性,可能被篡改

解决方案

加密协议

  • 由于互联网是由全世界各个地方的网络组成,无法避免被请求数据在传输过程中被窃听, 所以可以通过使用HTTPS加密协议,做到窃听者即使拿到请求数据,也无法理解通信的内容。

验证通信方的身份,避免遭遇伪装

  • 定通信方的身份,证书是由值的信任的第三方机构颁发,用以证明服务器和客户端是实际存在的

证明报文的完整性,避免遭篡改的请求

  • 通过SSL提供的认证和加密处理以及摘要功能,来避免

HTTP和HTTPS的区别

与SSL组合使用的HTTP被称为HTTPS(超文本传输安全协议)
HTTP+加密+认证+完整性保护=HTTPS


通常HTTP直接和TCP通信,HTTPS这是先和SSL通信,再由SSL和TCP通信
我们正是通过SSL协议来解决上述的HTTP安全问题

SSL与TLS简介和区别

  • SSL(安全套接字层协议),TLS(安全传输层协议),是用于在网络上安全的传输数据,主要提供以下功能:
    • 认证用户和服务器,确保数据发送到正确的客户机和服务器
    • 加密数据以防止数据中途被窃取;
    • 维护数据的完整性,确保数据在传输过程中不被改变。
  • 在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制(几乎和3.0一样),更名为TLS1.0,可以说TLS1.0就是SSL的3.1版本

HTTPS工作流程

在阐述HTTPS工作流程之前,先了解下用到的两种加密方法

  • 对称密钥加密
    • 即通信双方使用相同的密钥进行加密解密
    • 问题在于在互联网上如何安全的将密钥转交给对方,并安全的管理密钥
  • 公开密钥加密
    • 使用一对非对称的密钥,公钥和私钥,私钥需要自己妥善保管,公钥可以随意发布
    • 加密时,发送密文的一方使用对方的公钥加密,对方收到后使用私钥解密
    • 这种方式因为不需要发送用于解密的私钥,所以不用担心私钥被窃听盗走
  • 性能区别
    • 由于公开密钥加密处理起来更复杂,所以处理速度较慢

HTTPS采用混合加密机制

  • 在交换密钥环节使用公开密钥加密方式,主要是为了安全的交换密钥
  • 在之后的建立通信传输环节使用对称密钥加密,主要对称密钥加密性能更高

如何安全的交换共享密钥 - 证书(证明公开密钥正确性)

  • 如何选择加密方式
    • 选择对称密钥加密, 因为速度更快
    • 决定使用对称密钥加密后,关键点在于如何传输约定的用于加密的密钥
    • 基于安全,考虑使用公开密钥加密来传输使用的密钥,由于私钥并不会传输所以是安全的
    • 这个时候问题在于解决如何确定收到的公钥是需要请求的服务器发送的公钥,中途没有被替换
    • 解决方案是加入值的信赖的第三方认证机构,来认证收到的公钥是真正请求服务器的公钥
  • 具体流程如下
    • 服务器管理员向数字认证机构提出公开密钥的申请
    • 数字认证机构使用自己的私钥对公开密钥做数字签名,然后将该公开密钥放入公钥证书
    • 服务器将公钥证书发送给客户端
    • 客户端使用数字认证机构的公开密钥对证书上的数字签名进行验证
    • 验证通过后明确两件事:一、证书上的数字签名是真实有效的数字证书认证机构。二、服务器的公开密钥是值的信赖的
  • 这里有一个问题验证数字签名用到的认证机构的公开密钥如何安全的转交,通常的解决办法是浏览器事先在内部植入常用认证机关的公开密钥

HTTPS具体的工作流程

  • 服务器认证阶段

    • SSL连接建立阶段

    • 确定通信使用的ssl版本和加密算法相关信息,完成握手

      1. 客户端发送Client Hello报文到服务器开始一个新的会话,报文包含客户端支持的ssl版本、加密组件列表(所使用的加密算法及密钥长度等)
      2. 服务器发送Server Hello 响应客户端的请求,在报文中包含ssl版本和加密组件(从客户端发送来的加密组件中筛选出来的)
      3. 服务器发送Certificate报文,包含公钥密钥证书
      4. 服务器发送Server Hello Done报文通知客户端,SSL握手完成
    • 开始使用非对称加密交换共享密钥

      1. 客户端接收服务器发送来的公钥证书,先向对应的数字认证机构验证证书上的数字签名,确定服务器的公钥是否有效验证通过后,客户端生成并存储共享密钥master secret,使用服务器公钥加密后命名为pre-master secret,以Client Key Exchange 报文作为回应,报文包含Pre-master secret - 传输共享密钥
      2. 客户端发送change Cipher Spec报文,提示服务器后续通信采用Pre-master secret加密
      3. 客户端发送Finished报文,包含连接至今全部报文的整体校验值,本次握手协商能否成功,要看服务器是否能正确解密该报文
      4. 服务器使用自己的私钥解密pre-master secret,得到master secret,服务器同样发送Change Cipher Spec报文,确认后续通信使用Pre-master secret加密.
      5. 服务器同样发送Finished报文
      6. 服务器和客户端Finished报文交换完毕后,SSL连接建立完成
  • HTTP通信阶段,使用master secret加密

    1. 应用层协议通信,即发送HTTP响应
  • 断开SSL连接阶段

    1. 由客户端断开连接,断开时,发送close_notify报文,之后再TCP FIN报文来关闭与TCP的通信
图示

  • 客户端认证阶段(该步骤为可选的,大多数网站并没有)

    • 需要事先将客户端证书发给客户端,并且让客户端安装此证书(例如银行业务通过U盾安装客户端证书)

    • 具体步骤

    1. 接收到需要认证资源的请求,服务器发送Certificate Request报文,要求客户端提供客户端证书
    2. 客户端把客户端证书信息以Client Certificate报文发送给服务器
    3. 服务器验证客户端证书通过后领取证书内客户端的公开密钥,然后开始HTTPS加密通信
    • 通常和表单一起采用双重认证方式
      • 证书用来认证客户端计算机
      • 表单输入的账号密码用于认证是用户本人

本文标签: HTTPS协议基础知识