https即http+SSL,是基于http的一种加密传输方式,要了解https,首先就要了解SSL。算法
SSL是一种加密方式,主要分为三个部分:加密、数字签名、认证。浏览器
下面咱们主要从这三个部分依次提及:安全
SSL加密是把对称加密和非对称加密混合起来加密的。服务器
加密和解密双方使用同一个密钥的方式叫作对称加密。这种方式最大问题是怎样将密钥传给对方,所以要保证密钥传输过程当中的安全性,而普通的http请求并不具有安全性,故SSL不单独使用对称加密。网络
非对称加密解决了数据在网络上请求的安全问题,该方式里有两种密钥:公有密钥和私有密钥。性能
私有密钥用于解密,不能随意发布,公有密钥用于加密,能够随意发布,发送密文的一方使用公有密钥对数据进行加密,对方收到数据后用本身的私有密钥解密,私钥不能在网络上发送,所以没必要担忧安全性问题。加密
但以上方式也有局限性,好比在典型的http请求中,双方都要对数据进行加密,而私钥只在一方,另外一方没有私钥不能对数据进行解密,而若是双方都使用非对称加密,则传输效率会很低。spa
那么如何才能使用在保证安全性和效率的状况下,客户端和服务端都能进行加密和解密呢?这正是SSL的加密原理,前面我已经说过SSL是经过非对称加密和对称加密实现的,你能够设想一下如何解决上述问题。图片
下面咱们简单说说https中SSL的步骤,首先咱们定义对称加密的密钥为对称密钥,非对称加密的密钥为公有密钥和私有密钥:it
客户端向服务器发起SSL握手,此时客户端向服务器发送的报文信息为:
服务端收到客户端的报文后,再向客户端发送报文信息,此时报文信息为:
SSL使用以上几步就解决了http请求的安全问题,看起来很简单,可是实际的SSL仍有许多步骤来完善上面几步。
以上加密步骤的四、5步,SSL用了数字签名机制保证传输“对称密钥”的一致性,详细为:
从上面步骤能够看出数字签名是创建在非对称加密基础上的,实际上在SSL的许多过程当中,数字签名也能够创建在对称加密的基础上。
在以上SSL加密过程当中的第2步,咱们能够看到服务端向客户端传的是数字证书而不是公有密钥,实际上若是单独传输公有密钥,客户端不能肯定该公有密钥就是服务器传来的公钥,所以数字证书机制就是来单独解决这个问题的。
数字证书,有点像生活中的身份证、护照等,是由一个官方的证书颁发机构(又名CA)签发的一组数据。这种证书很难伪造,用于使用者的身份证实。
客户端会对数字证书进行一段认证流程来取出数字证书里的公有密钥:
咱们能够用一张图来展现整个SSL加密的过程: