Git 两种认证方式 HTTPS 和 SSH 的原理与比较

参考:https://www.cnblogs.com/yssjun/p/10145864.html

代码托管平台如 GitHub、Gitee等,使用 Git 作为版本控制工具,当用户在本地对远程仓库做一些操作时,平台需要认证该用户的账号是否有权限对该 repository 做操作,一般都提供两种认证方式 https 和 ssh

在这里插入图片描述

明面上使用能感受的区别:

  • 使用 HTTPS url 不需要事先做什么配置,但是每次fetch和push远程都需要输入账号和密码(fetch公共仓库不需要)

  • 使用 SSH url 之前要先配置和添加 SSH key,之后的每次fetch和push远程都不需要输入账号和密码

HTTPS

http 协议运行于应用层,是应用层通信协议,使用传输层的TCP协议进行传输控制;ssl 协议位于应用层和传输层之间,主要为应用层提供加密服务。https 可以看做是 http+ssl,即使用 ssl 协议加密传输数据的 http 协议

用 https 方式操作远程仓库需要根据提示提供自己的username和password,这种方式比较容易理解,即把自己在平台的账号和密码用SSL协议加密后发送给平台进入认证,然后授权进行相关的远程操作,后续传输的数据也使用 ssl 加密,即操作权限验证和加密传输数据两步。

SSH

ssh 方式基于非对称加密算法,简单来说,有一对钥匙,称为公钥和私钥(公钥是可以公开的,私钥是自己保管的),如果用公钥对数据进行加密,只有用与之对应的私钥才能解密,保证了数据的机密性。

公钥是通过私钥算出来的,但是反过来,(从数学原理上来说,以当下的计算机性能)从公钥计算出私钥是不可行的,所以只要私钥不泄露,就可以认为是安全的。

  1. A,B 要相互发送信息,A 和 B 要分别产生一对用于加密和解密的公钥私钥

  2. A 的私钥保密,A 的公钥告诉 B;B 的私钥保密,B 的公钥告诉 A。

  3. A 要给 B 发送信息时,A 用 B 的公钥加密信息,因为 A 知道 B 的公钥。

  4. A 将这个消息发给 B(已经用 B 的公钥加密消息)。

  5. B 收到这个消息后,B 用自己的私钥解密 A 的消息。其他所有收到这个报文的人都无法解密,因为 B 的私钥只有自己知道。

  6. 反过来,B 向 A 发送消息过程类似。

如何生成、配置SSH key ?

本机产生一对钥匙,在用户文件夹下的 .ssh 目录内

在这里插入图片描述

git client (本地)保管私钥,server (代码托管平台)保管公钥;远程也会持有一对公钥和私钥。

当本地需要登录远程时,本地用自己的私钥加密,做身份验证,具体过程如下:

  1. 本地主机向远程主机发送一个登录请求
  2. 远程收到消息后,返回一个随机生成的字符串
  3. 本地拿到该字符串,用存放在本地的私钥进行加密,再次发送到远程
  4. 远程用之前存放在远程的公钥对本地发送过来加密过的字符串进行解密,如果解密后与源字符串等同,则认证成功。

当需要对远程 push 数据时, 本地用平台的公钥加密, 保证数据的机密性,具体过程如下:

  1. 本地主机向远程主机发送一个push请求
  2. 远程收到消息后,返回一个自己的公钥
  3. 本地拿到该公钥,把要发送的数据用该公钥加密,再次发送到远程
  4. 远程用自己的私钥解密,获得原始数据

当需要向远程pull 数据时, 平台用本地的公钥加密, 保证数据的机密性,具体过程如下:

  1. 本地主机向远程主机发送一个pull请求
  2. 远程收到消息后,用本地存在平台上的公钥加密本地请求的数据发送给本地
  3. 本地拿到数据,用自己的私钥解密,获得原始数据
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值