HTTPS vs SSH 通信过程对比

这两个协议有些相似之处,故一起对比记录

对比:

  • 相同点:均使用对称加密和非对称加密的组合方式,来保证数据传输的安全性和效率

  • 不同点:

    • serverclient传输public key时,https通过第三方CA(证书机构)校验,ssh需要去官方手动校验
    • 用于对称加密的秘钥,https由客户端提供,ssh由双方协调生成
    • https通过对称秘钥开始数据通信,ssh需要进一步验证(密码或另一组private key / public key)

HTTPS

重点:

  1. 如何验证server端的public key
  2. 如何安全传输对称秘钥

简要流程如下:

  • client通过TCP三次握手,与server建立连接
  • server将证书信息发送到client(包含public key)
  • client通过证书颁发机构进行验证(多缓存在客户端中)
  • 验证通过后,client生成对称秘钥,通过证书中的public key加密后,传输到server
  • server用对应的private key,解密得到对称秘钥
  • 至此,完成非对称加解密过程,之后的通信均是对称加解密过程
    HTTPS.jpg

SSH

重点:

  1. 两组private key / public key用意不同

简要流程如下:

  • client通过TCP连接server

  • server返回对应的public key

  • client通过官方自行校验public key的合法性

  • 校验通过后,双方通过Diffie-Hellman算法,协商对称秘钥

    期间生成各自的private key/public key,使用非对称加密通讯,此过程可参考本文提供的参考资料

  • 之后的校验过程(Authentication)和数据通讯过程,均使用此秘钥,进行对称加解密

  • Auth过程分为两种:

    1. 通过账号密码

    2. 通过private key / public key

      • client生成private keypublic key,并将public key手动传输至server
      • client将秘钥ID(for the key pair)发送至server
      • server通过ID,在authorized_keys文件中查找对应的public key
      • 如找到,server端生成一个随机数,并用public key加密,发送到client
      • clientprivate key进行解密,并计算MD5值,发送至server
      • server用原始的随机数,也计算得到MD5值,与client传来的值作比较,匹配即通过验证

      传输过程,均使用之前协商的对称秘钥,通过对称加解密传输,此过程中的private key / pulic key 只用作验证

SSH.jpg

Reference

  • https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process
  • https://blog.csdn.net/zstack_org/article/details/53100545
  • https://juejin.im/post/5a2fd1216fb9a045204c315e
  • https://zhuanlan.zhihu.com/p/27395037

你可能感兴趣的:(HTTPS vs SSH 通信过程对比)