Git原理 SSH 公钥 私钥的理解

参考URL:[Jenkins][Git]ssh原理以及与https的区别 - 疲惫的豆豆 - 博客园

 

基本概念

密钥对:在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。
公钥:公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。
私钥:如上,用来解密公钥加密的数据。
摘要:对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。
签名:使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。
签名验证:数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。
加密:是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。

使用密码登录,每次都必须输入密码,非常麻烦。好在SSH提供了另外一种可以免去输入密码过程的登录方式:公钥登录。

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。

登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

以用户TopGun为例,流程如下:

公钥认证流程:

1. Client端用户TopGun将自己的公钥存放在Server上,追加在文件authorized_keys中。

2. Server收到登录请求后,随机生成一个字符串str1,并发送给Client。

3. Client用自己的私钥对字符串str1进行加密。

4. 将加密后字符串发送给Server。

5. Server用之前存储的公钥进行解密,比较解密后的str2和str1。

6. 根据比较结果,返回客户端登陆结果。

这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:

$ ssh-keygen

运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。

运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。

小结:

加密和认证,

加密是保证数据传输过程中数据是安全的。

认证是确保请求发起是请求发起方,不是别人。

加密利用公钥的加密和解密的特性;

认证是利用公钥和私钥  签名和验签的特性;

HTTPS 利用 = 公钥加密和私钥解密+对称加密

git SSH协议,利用的公钥和私钥的认证特性,客户端把公钥上传到服务端;客户端发起请求是用私钥签名,服务端利用公钥验签。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值