美文网首页程序员
聊一聊 HTTPS(一)—— 概述

聊一聊 HTTPS(一)—— 概述

作者: geverway | 来源:发表于2017-03-16 20:23 被阅读66次

    https 顾名思义,就是安全版的 http。既然说 https 是安全的,那么为什么它安全呢?原因是相比于 http ,htttps 在 http 之下加了一层 SSL/TLS(Secure Socket Layer/Transport Layer Secure)。SSL/TLS 是用来加密传输信息的。

    1、http发送的消息都是未经过加密的,而且直接通过下层 TCP 直接发送。这样如果有人在发送途中,截获到信息,由于信息是未加密的,攻击人轻易地就能得知信息的内容。

    2、而对于 https 来说,它并不是将信息直接交由 TCP 来发送。而需要经过 SSL/TLS 层的加密,加密后的内容,再由 TCP 来发送。相当于在 TCP 层上,HTTP 之下,构建了一层 SSL/TSL 。

    3、这个加密过程中

    • 首先,需要验证数字证书是否签发自可信的 CA(Certificate Agent) ,以此来验证站点的合法性。
    • 在确认站点是可信之后,client 和 server 会协商一个会话密钥(session key)。会话密钥(session key)来加密双方通信信息。会话的加密一般采用对称加密。目的是为了降低加密解密运算的复杂度

    4、SSL/TLS 的加密对用户是透明,感受的不到它的存在,在浏览体验上和 http 并无二致。对于中间人,就算是截获报文,由于没有私钥,无法对报文进行解密

    SSL

    SSL.png

    https 通信的过程

    步骤1,在端口号 443 建立 TCP 连接
    步骤2,进行站点身份验证,和加密方法的协商
    步骤3,http 发送信息给 SSL ,SSL 使用协商的加密算法加密信息后,发送给 TCP
    步骤4,接收使用协商的加密算法加密的信息,并解密后发给 http 层
    步骤5,关闭 SSL 连接
    步骤6,关闭 TCP 连接

    下图左侧a为 http 连接建立过程,右侧b为 https 连接建立过程

    https建立连接、请求和释放连接.png

    说一说关键步骤2

    步骤 2 可以分为两个步骤
    1、进行站点的身份认证
    2、会话加密算法的协商、会话秘钥的生成

    在建立 TCP 连接后,就可以进行站点身份的验证和会话内容加密算法的协商。

    在说明身份验证的过程,需要先简单了解一下由 CA 签发的数字证书。 数字证书的一般形式(x.509 v3 certificate)如下图所示。

    https 证书形式.png

    来看一下知乎的证书chrome->开发者工具->security

    包含了,证书序列号、证书过期时间、站点所有者、域名、公钥、签发 CA和证书的签名。

    证书的签名是用来验证证书的完整性和防止被篡改。它生成过程是,通过一种非对称加密算法(如RSA),使用私钥对证书所有域进行加密运算后得到的一串数字签名。

    进行站点身份验证的过程是这样的:

    首先,client 获得 server 发来的数字证书。
    然后验证数字证书是否过期、是否签发自可信的CA、证书是否完整是否被篡改,再验证证书的发来站点和证书上的站是否一致。如果以上,验证都通过。那么站点就是可信的。可以进一步协商,进行会话所需要的密钥。然后使用此密钥对会话内容进行加密解密

    首先,验证数字证书
    • 日期验证(Date check),通过和证书中的过期字段对比,判断证书是否有效
    • 签发者验证(Signer trust check),判断证书中的 CA 是否在本地 CA 信任列表上
    • 签名验证(Signature check),通过使用证书中的公钥和加密方法,对signature进行反向解密,来验证证书的内容是否和解密出的内容一致
    • 站点身份认证(Site identity check),将站点的域名和证书域名比较,来验证数字证书发自可信任的站点


      SSLhandshake

    数字证书的签名验证中,使用的非对称加密。signature = d(cert,private),通过使用公式 e(d(cert,private),pub) = cert,即可验证证书的真伪。

    然后,协商对会话加密的密钥

    在上面那张图中可以看到,client 在请求连接站点时,会向服务器请求数字证书,同时发送可选的加密方式。
    站点在接收到请求后,会选择一种加密方式。此时,client 和站点就拥有了加密和解密的密钥。接下来,双方的通信就可以使用这个协商的密钥的进行加密。
    一般情况下,对会话进行加密使用的是对称加密。原因是对称加密的加密和解密速度快于非对称加密。

    在验证成功后,就可以进行加密会话

    相关文章

      网友评论

        本文标题:聊一聊 HTTPS(一)—— 概述

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