为了抢口罩,我竟然把 https 的原理整明白了
下面我用 wireshark 来抓一次 csdn 的 https 连接请求。 首先先看 ClientHello,TLS 版本信息,Session,以及支持的密码套件 随后的 ServerHello,不难发现选择了 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 的加密方法 可以看到,ServerHello 后面还跟着一个数据包。其中有三个关键字:Certificate 、Certificate Status 、Server Key Exchange Certificate 就是证书信息: 从数据包可以看出是由 签发,并且采用 sha256WithRSAEncryption 进行签名 Certificate Status 则是证书的状态信息,包含证书的有效期至 最后 Server Key Exchange 则是 Server 的 Public Key 了 由于协商出来的是 ECDHE 密钥协商算法 ,所以 Server 把 ECDH 的参数和公钥发给 Client。这里的 ECDH 曲线是 secp256r1,公钥是 047b36092eb10............... 至此 ServerHello 结束。 由于是 ECDHE 协商算法,所以 Client 需要发送 ECC DH 公钥,也有三个关键字: Client Key Exchange 不必多说,是 Client 发送的 ECCDH 公钥,其值是 04acb6e..... ChangeCipherSpec 消息结构很简单,发送这条消息是为了告诉 Server ,Client 可以使用 TLS 记录层协议进行密码学保护了。第一条进行密码学保护的消息是 Finished 消息。 后面两个数据包则是流量控制。有助于确保只传播接受者需要使用的数据数据。之后就是新的 session 建立,Server 返回 ChangeCipherSpec 和 finish。这里还有一部分的 TLS 会话复用机制。请读者自行查阅。 目前为止 https 整个连接已经建立起来了。 现在我们已经解决了Https如何给数据加密的过程。 2. 现在来看第二个问题:如何验证通信双方的身份? 在上面的 wireshark 流量分析中,我们可以看到一个 Certificate 的身影。没错, HTTPS 通过使用 证书 来对通信方进行认证。 数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构。服务器的运营人员向 CA 提出公开密钥的申请,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。 进行 HTTPS 通信时,服务器会把证书发送给客户端,客户端取得其中的公开密钥之后,先进行验证,如果验证通过,就可以开始通信。 举个例子 上图中的步骤 1、2、3、4 并不是每次都需要这样请求。1、2、3 步只需要在注册新的公钥的时候才会进行。第四步仅在第一次需要使用公钥密码的时候需要,之后保存到了电脑中,就不用每次都请求公钥了。 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |