美文网首页
HTTPS 是这样握手的

HTTPS 是这样握手的

作者: 一颗冰淇淋 | 来源:发表于2023-01-22 17:39 被阅读0次

    HTTP协议默认是明文传输,存在一定的安全隐患,容易被中间人窃听和攻击,在 加密解决HTTP协议带来的安全问题 中提到使用哈希、对称加密、非对称加密等方式对数据加密,能解决数据安全的问题。

    以上加密方式需要我们手动的使用加密算法对数据进行处理,如果觉得自己制定加密规则比较麻烦,可以使用统一的数据安全解决方法:HTTPS(超文本传输安全协议)。

    HTTP和HTTPS在浏览器的表现

    在浏览器中输入 HTTP 的url,如果该网站存在 HTTPS 地址,会直接跳转 HTTPS

    1_浏览器端http和https.png

    TLS/SSL

    HTTPS 是在 HTTP 的基础上使用 SSL/TLS 来加密报文,对窃听和中间人攻击提供合理的防护。

    2_HTTPS.jpg

    TLS(传输层安全性协议)的前身是 SSL(安全套接层),工作在【应用层】和【传输层】之间。所以 HTTPS 通信过程比 HTTP 多一个 TLS 连接的步骤,总共有三步

    • TCP的三次握手
    • TLS/SSL的连接
    • HTTP请求和响应
    3_ssl工作在哪一层.png

    TLS连接

    TSL 连接大概存在以下步骤,每一步请求都存储着连接相关的数据,其中省略了服务器返回的部分确认消息,这里使用的是密钥交换算法 ECDHE,不同的密钥交换算法,流程存在差异。

    4_tls连接流程.png

    具体流程

    1. client hello
      传递:TSL的版本、支持的加密套件(Cipher suit)、随机数 服务器会给回确认ACK
    2. server hello
      传递:TLS的版本、选择的加密的套件(从接收到的客户端加密套件中选择)、随机数
    3. Certificate
      传递:服务器的公钥证书
    4. Server Key Exchange
      用以实现ECDHE算法的其中一个参数(Server Params) ECDHE是一种密钥交换算法,为了防止伪造,Server Params经过了服务器私钥签名
    5. Sever Hello Done
      告知客户端,协商部分结束 前5步明文共享了:Client Random、Server Random、Server Params,客户端也已经拿到了服务器的公钥证书,接下来,客户端会验证证书的真实有效性
    6. Client Key Exchange
      用以实现ECDHE算法的另一个参数(Client Params) 目前为止,客户端和服务器都拥有了ECDHE算法需要的2个参数:Server Params、Client Params,可通过他们计算出一个新的随机密钥串:Pre-master secret,然后结合Client Random、Server Random、Pre-master secret生成一个主密钥,最后利用主密钥衍生出其他密钥:客户端发送用的会话密钥、服务器发送用的会话密钥等
    7. Change Cipher Spec
      告知服务器:之后的通信会采用计算出来的会话密钥进行加密
    8. Finished(在wireshark中看到的是Encrypted Handshake Message)
      包含连接至今全部报文的整体校验值(摘要),加密(用第六步结束时生成的会话密钥)之后发送给服务器 服务器->客户端
    9. Change Cipher Spec
      告知客户端:之后的通信会采用计算出来的会话密钥进行加密
    10. Finished(在wireshark中看到的是Encrypted Handshake Message)
      到此为止,客户端服务器都验证加密解密没问题,握手正式结束。后面开始传输加密的HTTP请求和响应 Application Data 最终的加密内容

    第八步是通过服务器验证客户端的密钥,第九步和第十步通过客户端验证服务器的密钥,从wireshark抓包看到的数据就像这样

    5_抓包tls.jpeg

    基于以上加密、制定密钥的方式,使得HTTP协议发送的数据更为安全。

    HTTPS的成本

    HTTPS虽然安全可靠,但它相比HTTP需要更多的成本,比如:证书的费用,加密解密计算,访问速度变慢。

    并且有些历史页面多年未改动,数据也不敏感,花费时间重构从成本上来说并无必要,所以企业的处理方式为:包含敏感数据的请求才使用HTTPS,其他保持使用HTTP(比如首页都用HTTP,登录等操作使用HTTPS)。

    以上就是HTTPS相关介绍。更多有关 前端网络协议 的内容可以参考我其它的博文,持续更新中~

    相关文章

      网友评论

          本文标题:HTTPS 是这样握手的

          本文链接:https://www.haomeiwen.com/subject/cjwkhdtx.html