git连接github仓库的时候遇到到底是使用http呢还是ssh的问题,那么就要了解这两种方式的优缺点在哪呢?

  1. 首先http和ssh都是作为登陆github仓库使用的,http因为在push的时候没有远程仓库权限,需要输入账户和密码,就很麻烦。
  2. ssh不一样,通过本地生成的公钥放入github中,可以实现免密登陆,这样就不要在push时输入密码什么的。

那么ssh加密的工作原理是什么呢?

  1. 对称加密,加密和解密使用一套密钥;
  • 对称加密加密级别高,但是服务端和客户端的密钥一样的情况下,一方密钥丢失就会导致整个加密系统安全性不复存在。
  1. 非对称加密,加密和解密使用公钥和私钥;
  • 服务端将公钥公布出去,客户端请求时会获取公钥,使用公钥加密后的将数据返回,服务端使用私钥解密,这样私钥就只保存在服务端,增加了安全性。即使如此,信息也不是绝对安全,因为存在“中间人攻击”,因为客户端无法确保请求的公钥就是我们要请求的服务器发给我们的,这是很难说的,如果我们的请求被劫持,我们使用Hacker发给我们的公钥加密了我们的账户密码,然后发给Hacker,那么我们的信息就会泄露。

如何预防中间人攻击?

1.口令登陆:

一般在第一次登陆的时候,会提示我们

The authenticity of host 'host (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?

上面的信息说的是:无法确认主机host(12.18.429.21)的真实性,不过知道它的公钥指纹,询问你是否继续连接?我们就可以和server端的公钥对比,如果确定了那么这个公钥就会存储在known_hosts文件中,表示我们信任的公钥,下次再次登陆就不会有提示信息了。

2.公钥登录(免密登陆)

客户端将公钥放在服务端,客户端在发送请求时,server端会发送一个随机字符串,客户端使用私钥加密后发给server端,server使用公钥解密后对比成功就允许登陆。这里就不存在什么账户密码传输,全是密钥之间的认证。