HTTPS 原理解析

254 阅读3分钟
  1. 对称加密 client和server持有相同密钥,对数据进行加解密,一旦密钥被黑客获取,加密内容形同虚设。

  2. 非对称加密

    1. server端持有公钥pubKey和私钥priKey
    2. client端向server端索要公钥pubKey,server端将pubKey返回给client端
    3. client端的数据经公钥pubKey加密发至server端,再由server端的私钥priKey解密;
    4. server端的数据经私钥priKey加密发至client端,再由公钥pubKey解密。 问题:client端持有的公钥pubKey是server端下发的,黑客有可能拿到,这样一来,server端发至client的数据就有可能被黑客拦截并解密
  3. https: 非对称加密 + 对称加密

    1. client向server索要pubKey,server端返回pubKey至client;
    2. client 生成一个随机数rn,并用公钥加密,形成一个新的加密数据newdata,并发送至server,server使用私钥对newKey进行解密,得到rn,后续client和server使用rn作为对称加密密钥进行数据传输; 特点: rn分别存放在client端和server端,黑客理论上无法拦截。

    问题: 中间人攻击,client最开始索要公钥的时候被黑客截获,黑客返回一个假的公钥给client,同时,黑客冒充client向server索要真实的公钥,后续,client与server的数据交互将由黑客这个中间人一直中转。

image.png

  1. CA证书。
    1. CA机构也有自身的公钥私钥CPubKeyCPriKey,CA机构使用CPriKey对一个网站server端的pubKey进行加密,得到一个license证书派发给server端(这个过程通常是需要给CA机构付费的
    2. client端要跟server端进行数据传输,就先向server端请求这个license证书(CPriKey+pubKey),再用已经提前写死到client端系统内的CA公钥CPubKey,对license进行解密,就能拿到server端的pubKey
    3. 接着,client端会生成一个对称密钥rn,也称为会话密钥,并用pubKey加密它,然后传给server端,(这个过程中即使有中间人也没什么影响,因为中间人没法拿到priKey,因此没办法对使用pubKey进行非对称加密的内容进行解密,也就无法获取到随机数rn
    4. server端用priKey解密得到rn,之后client和server就使用这个rn进行对称加密的数据传输了。

整个过程中,即使插入中间人,也是安全的,原因如下:

  1. 中间人是无法伪造license的,因为license是由CA机构的CPriKey生成的,如果伪造,client端的CPubKey就解密不出来,会提示证书不可信任
  2. 中间人最多只能拿到server端下发的pubKey,但是也没啥用,client发出的数据(pubKey+rn)本身只能通过priKey解密,而priKey存在服务端,黑客没办法拿到,因此也就没办法解密拿到后续用于对称加密的密钥rn了。