对称加密、非对称加密、公钥、私钥、加密、签名、摘要、证书、CA 机构、中间人

  • HTTPS(HTTP Over SSL/TLS) 最主要任务就是加密通信,即双方都持有一个对称加密的密钥进行安全通信。而最关键的一步就是如何保证这个对称加密的密钥不被中间人劫取。

  • 接上述问题,对称加密的秘钥如何被保证不被中间人劫取?那就又引出了一种加密方式 —— 非对称加密
  • 非对称加密需要服务器生成一对公钥和私钥,将公钥发送给客户端,客户端使用公钥 加密对称加密的秘钥,服务器使用私钥解密密钥,则双方就拿到了对称加密的密钥。即使中间人拿到了公钥,充当服务器端,但是也没有私钥来解密客户端的加密数据。

  • 但是,仍怕被篡改!
  • 中间人通过篡改,最终可以获得会话秘钥,这个过程很简单,如下图。
  • 由此可见,服务器发送的公钥被中间人篡改了。

  • 如何消除这个第一次明文的尴尬呢? —— CA 机构
  • 分析如下:
    • 服务端把自己的公钥给 CA,让 CA 用 CA 的私钥加密,然后返回加密结果。
    • 这个加密结果可以用 CA 的公钥进行解开,这意味着谁都可以解开。
    • 将这个加密结果发送给客户端,这时,我们假设这个加密结果被中间人拦截了,那么它想要篡改公钥的话,就要用 CA 的私钥对要篡改的公钥进行加密,然后发送给客户端。但是,问题来了!CA 用私钥进行加密可不止是仅仅对服务器的公钥加密,而是对公钥以及服务器域名信息、公司注册等隐私信息生成的哈希摘要进行加密从而生成数字签名。作为一个中间人,当然不会暴露出这种隐私信息了,所以中间人即使拿到了公钥,也无计可施了。
    • 然后客户端用这个公钥,给之后对称加密的秘钥加密,传给服务端,中间人由于不知道服务端私钥,解不开。
    • 从而大功告成,之后就是用对称加密的密钥进行数据加密传输了。
  • 这两种加密方式,永远有那么第一次的明文内容,会被中间人篡改。

文章参考:程序员鱼皮 —— 为什么你理解不了 HTTPS?