程序员

聊一聊 HTTPS(一)—— 概述

2017-03-16  本文已影响66人  geverway

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、这个加密过程中

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、证书是否完整是否被篡改,再验证证书的发来站点和证书上的站是否一致。如果以上,验证都通过。那么站点就是可信的。可以进一步协商,进行会话所需要的密钥。然后使用此密钥对会话内容进行加密解密

首先,验证数字证书

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

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

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

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

猜你喜欢

热点阅读