https简单解读

https是什么?

https即http+SSL,是基于http的一种加密传输方式,要了解https,首先就要了解SSL。算法

SSL

SSL是一种加密方式,主要分为三个部分:加密、数字签名、认证。浏览器

下面咱们主要从这三个部分依次提及:安全

加密

SSL加密是把对称加密非对称加密混合起来加密的。服务器

加密和解密双方使用同一个密钥的方式叫作对称加密。这种方式最大问题是怎样将密钥传给对方,所以要保证密钥传输过程当中的安全性,而普通的http请求并不具有安全性,故SSL不单独使用对称加密。网络

非对称加密解决了数据在网络上请求的安全问题,该方式里有两种密钥:公有密钥私有密钥性能

私有密钥用于解密,不能随意发布,公有密钥用于加密,能够随意发布,发送密文的一方使用公有密钥对数据进行加密,对方收到数据后用本身的私有密钥解密,私钥不能在网络上发送,所以没必要担忧安全性问题。加密

但以上方式也有局限性,好比在典型的http请求中,双方都要对数据进行加密,而私钥只在一方,另外一方没有私钥不能对数据进行解密,而若是双方都使用非对称加密,则传输效率会很低。spa

那么如何才能使用在保证安全性和效率的状况下,客户端和服务端都能进行加密和解密呢?这正是SSL的加密原理,前面我已经说过SSL是经过非对称加密和对称加密实现的,你能够设想一下如何解决上述问题。图片

下面咱们简单说说https中SSL的步骤,首先咱们定义对称加密的密钥为对称密钥,非对称加密的密钥为公有密钥私有密钥it

  1. 客户端向服务器发起SSL握手,此时客户端向服务器发送的报文信息为:

    • 客户端支持的SSL版本
    • 客户端支持的加密算法(包括Hash算法)
    • 客户端支持的密钥长度
  2. 服务端收到客户端的报文后,再向客户端发送报文信息,此时报文信息为:

    • 决定使用的SSL版本
    • 决定使用的加密算法(包括Hash算法)
    • 数字证书(包含公有密钥)
  3. 客户端经过验证数字签名取出数字证书内的公钥,并生成一个随机密码串,该随机密码串即为“对称密钥”,之后客户端和服务器都使用该随机密码串和约定的加密算法进行加密和解密。
  4. 客户端经过公有密钥“对称密钥”进行加密传输给服务器
  5. 服务器经过私有密钥对报文进行解密获得“对称密钥”
  6. 至此双方都拥有了“对称密钥”,之后http通讯都使用对称加密的方式进行消息传输,这样既保证了安全性,又不会下降性能。

SSL使用以上几步就解决了http请求的安全问题,看起来很简单,可是实际的SSL仍有许多步骤来完善上面几步。

数字签名

以上加密步骤的四、5步,SSL用了数字签名机制保证传输“对称密钥”的一致性,详细为:

  1. 客户端首先将“对称密钥”用约定好的Hash算法加密生成一个Digest,将Digest经过公有密钥加密生成一个Signature。
  2. 客户端同时发送“对称密钥”、Signature到服务端
  3. 服务端收到信息后,用私有密钥解密Signature得出Digest-1,再将“对称密钥”用Hash算法加密生成Digest,比较Digest-1与Digest是否一致,若一致则信息没有被篡改

从上面步骤能够看出数字签名是创建在非对称加密基础上的,实际上在SSL的许多过程当中,数字签名也能够创建在对称加密的基础上。

认证

在以上SSL加密过程当中的第2步,咱们能够看到服务端向客户端传的是数字证书而不是公有密钥,实际上若是单独传输公有密钥,客户端不能肯定该公有密钥就是服务器传来的公钥,所以数字证书机制就是来单独解决这个问题的。

数字证书,有点像生活中的身份证、护照等,是由一个官方的证书颁发机构(又名CA)签发的一组数据。这种证书很难伪造,用于使用者的身份证实。

客户端会对数字证书进行一段认证流程来取出数字证书里的公有密钥:

  1. 客户端经过证书中“证书颁发机构的数字签名”来验证证书的来源和完整性。通常客户端(如浏览器)会内置一个受信任的证书颁发机构列表。
  2. 一但认证经过,则取出证书内的公有密钥用于客户端与服务器的通讯。

总结

咱们能够用一张图来展现整个SSL加密的过程:
图片描述

相关文章
相关标签/搜索