何为HTTPS?

HTTPS即为加密的HTTP,HTTP是超文本传输协议,是明文传输的。HTTPS不是一个新的协议,而是HTTP+TLS(SSL)。假设传输层是TCP,原本HTTP先和TCP通信,而加了SSL后,HTTP先和SSL通信,然后由SSL再和TCP通信,相当于SSL是HTTP和TCP的一个中间加密层。

加密方式

  • 共享密钥加密(对称密钥加密):加密和解密用同一个密钥。加密时必须把密钥传输给对方
  • 公开密钥加密(非对称加密):公开密钥加密使用一对非对称的密钥。一把叫做私钥,一把叫做公钥。私钥不能让人知道,而公钥可以随意发布,任何人都可以获得。如何加解密:发送密文的一方使用公钥进行加密处理,对方接收到加密的信息后,使用自己的私钥进行解密。这种方式不需要发送解密的密钥,所以也不必担心被攻击者窃听盗取。

但是非对称加密比对称加密在速度上是要慢的,所以HTTPS是混合使用这两种加密方式,为了兼顾安全和性能。

好了,划重点的一句话来了

在交换密钥阶段使用公开密钥加密方式(非对称),之后建立通信交换报文阶段使用共享密钥加密(对称)。

问题:对于这种非对称加密方式,如何证明公钥本身是安全,不是被攻击者替换过的?

答:使用数字证书认证机构(CA,Certificate Authority)和其他相关机关颁发的公开密钥证书。接收到证书的客户端可以使用数字认证机构的公钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端就可以明确:

  1. 认证服务器的公钥是真实有效的数字认证机构。
  2. 服务器的公钥是指的信赖的
数字签名的验证过程

数字证书验签

总结一下上面的数字证书验签的过程:

  1. 客户端A开启一个新的浏览器访问服务端B时,会先让A安装一个数字证书,这个证书包含了C机构的公钥
  2. 服务端B发来CA机构的给自己的证书,通过CA公钥解密被CA私钥加密过的hash值1,然后使用证书的内容做hash操作,生成hash值2,比较两个hash值,若相等,则可以确认这个数字证书是可以信赖的。

SSL握手过程

SSL协议握手过程的私钥生成过程
交换报文过程

总结一下上面SSL的握手过程:

  1. 客户端给出 支持的SSL版本+支持的加密方式+一个随机数1
  2. 服务端接收到客户端的信息后确认 加密方式+自己的安全证书+一个随机数2,发给客户端
  3. 客户端验证数字证书的有效性(上面的数字验签过程),生成一个随机数3,并将这个随机数3用服务端的证书公钥加密 后发送给服务端
  4. 服务端使用私钥解密这个随机数,得到随机数3
  5. 客户端和服务端都通过第一步和第二步确认的加密方式+3个随机数,生成对话密钥
  6. 有了对话密钥,接下来的通信就是使用这个密钥采用对称加密的方式,进行快速且安全的通信了