HTTPS是什么

为什么需要HTTPS

由于HTTP存在一些缺陷:

  • 通信使用明文,内容可能被窃听
  • 不验证通信方的身份,可能遭到伪装
  • 无法验证报文的完整性,报文可能被篡改

为了解决这些问题HTTPS诞生了。

HTTPS的实质

HTTP协议加上加密认证机制完整性验证就是HTTPS。

HTTPS并非一种新的协议。只是HTTP通信接口部分用SSL或TLS协议代替而已。所谓的HTTPS其实就是HTTP+SSL/TLS。

TLS以SSL为原型开发的协议,有时会统称该协议为SSL。

HTTPS的加密原理

HTTPS加密过程中使用了非对称加密对称加密结合的方式。

HTTPS加密过程

为什么不只用对称加密?

采用单钥密码系统的加密方式,同一个密钥可以同时做信息的加密和解密,这种加密的方法称为对称加密,也称为单密钥加密。

缺点:以对称加密算法加密,必须将密钥发送给对方。这时候,假如通信被监听,密钥被攻击人获取,这个时候加密就是去了意义。

如何解决这个问题?使用两把密钥(非对称加密)。

为什么不只用非对称加密?

与对称加密算法相反,非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是配对的,分别是公开密钥(公钥)和私有密钥(私钥)。

一般情况下,公钥是公开的,私钥是服务器私有的。公钥加密后的密文只能通过对应的私钥来解密,而私钥加密的密文却可以通过对应的公钥来解密。

缺点:加密比对称加密复杂,效率低。

如何保证公钥的正确性

与服务器进行通信时,如何才能保证你收到的公钥服务器发行的公钥,而不是被攻击者替换掉的呢?

为了解决这个问题,可以使用数字证书认证机构(CA)颁发证书。

CA业务流程:

  • CA会向申请者颁发一个证书,证书的内容有:签发者、证书用途、域名、证书到期时间、使用的HASH算法、签名使用的算法等。
  • 将证书的内容做一次HASH,得到HASH值。
  • CA的私钥对这个HASH值和使用的HASH算法加密,这样就完成了数字签名。
  • 将数字签名附加在证书的末尾。

客户端检验证书流程:

  • CA私钥对应的公钥,解密数字证书末尾的签名,得到HASH值和HASH算法。
  • 用得到的HASH算法,对证书内容进行HASH运算。如果得到的HASH值与解密得到的HASH值相同,那么检验通过,否则失败。

上面提到的C公钥怎么来的呢?

CA除了给申请者颁发证书,它本身也有自己的证书。CA自身的证书(一般由它自己颁发)在我们系统安装好的时候,就被微软(或其他操作系统的开发机构)安装再操作系统中了。而CA的公钥包含在其中。这样CA就可以通过自身的是要对发布的数字证书进行签名,而客户端就能用相应的公钥来解密。

HTTPS通信的过程

  1. 客户端发送Client Hello报文开始SLL通信。报文中包括客户端支持的SSL版本、加密组件(Cipher Suite)列表以及一个随机数A。
  2. 服务器可以进行SSL通信时,发送Server Hello报文作为应答。和客户端一样,在报文中包括SSL版本、加密组件列表(从客户端接收到的加密组件筛选出来的)以及一个随机数B。
  3. 之后服务器发送Certificate报文。报文中包含公钥证书。
  4. 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
  5. SSL第一次握手结束后,客户端会对服务器发过来的证书进行验证,如果验证成功,解密出证书的公钥。接着客户端以Client Key Exchange报文作为回应。报文中包含通信加密使用的一种被称为Pre-master secret的随机密码串,报文使用解密出的公钥进行加密。
  6. 客户端继续发送Change Cipher Spec报文。用于告知服务端,客户端已经切换到之前协商好的加密套件(Cipher Suite)的状态,准备使用之前协商好的加密套件加密数据并传输了。
  7. 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值(也就是HASH值),用来供服务器校验。
  8. 服务器接收到客户端的请求之后,使用私钥解密报文,把Pre-master secret取出来。接着,服务器同样发送Change Cipher Spec报文。
  9. 服务器同样发送Finished报文,用来供客户端校验。
  10. 服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。
  11. 应用层协议通信,即返回HTTP响应。
  12. 最后由客户端断开连接。断开连接时,发送close_notify报文。上图做了一些省略,这步之后再发送TCP FIN报文来关闭与TCP的通信。

Finish报文的作用?

上面已经提及,Finish报文是对至今全部报文的整体校验值(也就是HASH值)。当客户端把这个值通过得到的公钥进行加密的时候,服务器得到之后对其进行解密,然后再对全部报文进行一个HASH求值。如果这个值跟解密得到的值相等的话,那么说明客户端是可信赖的。
同样的,服务器发送这样的一个整体校验值,用来客户端验证服务器是否是真正要进行通信的那一个。
综上,这个Finish报文就是用来校验双方的身份的。

三个随机数的作用?

对于客户端
当其生成了Pre-master secret之后,会结合原来的A、B随机数,用DH算法计算出一个master secret,紧接着根据这个master secret推导出hash secretsession secret

对于服务端
当其解密获得了Pre-master secret之后,会结合原来的A、B随机数,用DH算法计算出一个master secret,紧接着根据这个master secret推导出hash secretsession secret

在客户端和服务端的master secret是依据三个随机数推导出来的,它是不会在网络上传输的,只有双方知道,不会有第三者知道。同时,客户端推导出来的session secrethash secret与服务端也是完全一样的。

那么现在双方如果开始使用对称算法加密来进行通讯,使用哪个作为共享的密钥呢?过程是这样子的:

双方使用对称加密算法进行加密,用hash secret对HTTP报文做一次运算生成一个MAC,附在HTTP报文的后面,然后用session-secret加密所有数据(HTTP+MAC),然后发送。

接收方则先用session-secret解密数据,然后得到HTTP+MAC,再用相同的算法计算出自己的MAC,如果两个MAC相等,证明数据没有被篡改。

MAC(Message Authentication Code)称为报文摘要,能够查知报文是否遭到篡改,从而保护报文的完整性。

为什么使用三个随机数?

客户端和服务器都需要生成随机数,以此来保证每次生成的秘钥都不相同。

使用三个随机数,是因为 SSL 的协议默认不信任每个主机都能产生完全随机的数,如果只使用一个伪随机的数来生成秘钥,就很容易被破解。

通过使用三个随机数的方式,增加了自由度,一个伪随机可能被破解,但是三个伪随机就很接近于随机了,因此可以使用这种方法来保持生成秘钥的随机性和安全性。

黑客拦截服务器证书并篡改,会出现什么情况?

  1. 如果黑客只是单纯的篡改,由于有数字签名,客户端会很容易判断出报文被篡改过。
  2. 黑客不仅修改了证书内柔,还替换了数字签名,由于黑客不知道CA的私钥,于是客户端用CA公钥解密时,得不到正确的信息,也很容易判断出报文是否被修改。
  3. 黑客从相同的CA申请了一个数字证书。由于这个数字证书是真实存在的,所以客户端可以成功的用CA公钥进行解密。但是,由于数字证书绑定了域名,因此客户端很容易发现证书域名与访问域名的不一致,便会发出警告。警告如下图:

一定要用HTTPS吗

当然不是,虽然HTTPS比HTTP要安全许多,但是由于加入了诸多的验证机制,导致它处理速度变慢。原因如下:

  • 客户端和服务器协商的次数变多,整体处理通信量会不可避免的增加。
  • 客户端和服务器需要进行额外的加密和解密的运算处理。会消耗更多的资源。

同时,使用HTTPS需要购买CA证书,需要额外的开销。

因此,大部分的Web网址都采用了一个折中的方法。对一些需要隐藏、私密的信息进行加密,而普通的信息不进行机密处理,以节省资源。

评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

载入天数...载入时分秒... 本站使用 Volantis 作为主题 鲁ICP备-20012065号