前言
团队的我的项目近期更换到 GitLab 托管了,验证形式也从以前的 HTTPS+SSH 变成了纯 SSH,所以就须要配置 SSH Key。
SSH 的加密应用的 RSA 算法,文章开端将给出一个简略的加密解密演示。
一、生成公钥私钥对
先看看无 Key 连贯近程仓库会呈现什么状况:
git fetch --all
正在获取 origin
The authenticity of host '[gitlab.yunzhi.com]:2208 ([123.234.166.144]:2208)' can't be established.
ED25519 key fingerprint is SHA256:oDUUd81eFr9WsLsNvx9fEHxb1bS71o.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[gitlab.yunzhi.com]:2208' (ED25519) to the list of known hosts.
git@gitlab.yunzhi.com's password:
Permission denied, please try again.
git@gitlab.yunzhi.com's password:
- 首先提醒密钥没有验证过,是否持续
- 抉择持续后会提醒输出 git 的明码
- 咱们没有 git 的明码
所以,是没有方法失常拉取的。
为什么会提醒 git 账户呢?我猜是 Url 里写的是 git@gitlab.xxx.com
也就是用户名艾特主机名,所以终端把 git 作为账户解决了,才会让咱们输出 git 的明码。
正确的打开方式来了:
在 Linux/Mac 终端或 Windows 的 GitBash 输出:
// 生成公钥私钥对
ssh-keygen -t rsa -C '邮箱'
// 示例,提示信息能够全副默认回车
ssh-keygen -t rsa -C '123.abc'
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/lyx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/lyx/.ssh/id_rsa
Your public key has been saved in /Users/lyx/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:eYm9YeewQwsUO/Ai5zgDb+tKNJZ7dEM 123@abc.com
The key's randomart image is:
+---[RSA 3072]----+
| o. . |
|+..o . |
|+*oooEo |
|Bo= o= . + . |
|=X o.o. S O . |
|*oO . . = O |
| = + = . |
|. o . |
|.o. |
+----[SHA256]-----+
一路操作之后会在用户目录~/.ssh/ 下生成两个文件:
其中,右边的是私钥,留在本人电脑上用于身份验证。
左边的是公钥,须要上传到 GitLab。
关上 id_rsa.pub 文件,全选复制:
在 GitLab 上找到 SSH Keys 页面,粘贴,会主动生成题目:
增加后上面就会显示已有的 SSH Key 了:
对于 Github 的操作形式相似:
再来拉取一次就胜利了:
至此操作局部已实现。
二、RSA 加密演示
之前老师演示过现场生成密钥对加密解密,但因为工夫起因没有演示完,这次本文来复现一下加密过程。
RSA 是一种非对称加密。
个别的加密形式称为对称加密,加密密钥和解密密钥一样,毛病在于一旦密钥泄露,密文就不平安了。
而对称加密指的是加密密钥和解密密钥不一样(公钥和私钥),公钥加密后只能用私钥解密。
接下来咱们用一个在线生成网站演示一下,相似网站很多,例如:
http://www.metools.info/code/…
首先点击按钮,生成一对公钥私钥。为了不便读者操作,我把密钥和密文都粘在了文章中。
复制一下密钥对:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuOVdG/jlSaQuzJvFlS0
EXRD4V8OnG1GaYwxnKj7gRizgmf5GBRxQgSRj+pTkj6VsEacGbGvi0T6gDcamJJJ
H2dEgJK+J3xDhjgetiA+RZjQ6sBlAE5f2NcdtYlckzl1K5K9aZXxlFHkQAqquwyI
NJtlupDEfbmVS7Zk2YUo4F2qxfLcKtHLpQJOMCZSXNPrX7Nv5cdXkbju0QKLNqr1
ymj8gLjhNyi2duAYBqAaDFuiklscPqeG/vZRKBbEezdZVZsqEynfedz440YRB3qW
N2kRfu+mtclRftbkv2FVrYCKw4SZ+coz4XVgKiCI/t33mFPDpgdroHaNdOERWwKf
jQIDAQAB
-----END PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC245V0b+OVJpC7
Mm8WVLQRdEPhXw6cbUZpjDGcqPuBGLOCZ/kYFHFCBJGP6lOSPpWwRpwZsa+LRPqA
NxqYkkkfZ0SAkr4nfEOGOB62ID5FmNDqwGUATl/Y1x21iVyTOXUrkr1plfGUUeRA
Cqq7DIg0m2W6kMR9uZVLtmTZhSjgXarF8twq0culAk4wJlJc0+tfs2/lx1eRuO7R
Aos2qvXKaPyAuOE3KLZ24BgGoBoMW6KSWxw+p4b+9lEoFsR7N1lVmyoTKd953Pjj
RhEHepY3aRF+76a1yVF+1uS/YVWtgIrDhJn5yjPhdWAqIIj+3feYU8OmB2ugdo10
4RFbAp+NAgMBAAECggEAbIhqbQrpV93nDfBEFFB3+9OvZNNwbEw8+O4Fkx6FAnuS
K9Vf8XZQMAleCLXamnMhidadVHIp5tAsiGIrGlfVpRk3gcWTqwMHX2N2dkZ0LgEe
GfHK/n+ESb5/FvhJQ+VZL16JoVsmXgqrFYY/A3nQase9exXmRWYYvzGib6OiOmLa
0InXQDhkKHmBHkyIClrMuCsCgg+4R1Jwowc4bSTyfSgZpXj3Q63drFGuQFR+dywj
cPs55jhJ7b37Utsk1YLXB4rj9gHECQlWVLuYXcOn4QPJ2Y0Su9LzhleaRmywxDJ1
lsMsy9AYsSQkFy9FIRzqRIy4yQ/cAzF7z2z78o950QKBgQDdJHibVm+PGT0hyVts
fE+0LvUGrEaCpC1xlWs0APQCGt5dtcTiV2XT8s+wKie8jmRn5NrYUydGcVVvQ98b
e2pTO964ahsGdGJ277g7oE6MQTkXDY9dB7DryMaa224u1idYofmBUvwOtloeaqo4
hegQaNza9ziKWSYgs56dOavV8wKBgQDTt4LJC0GjaLBIp3kND/gzzPvYlzHUELqy
q/B4EQCma+/kB08d1UZWlmS/eNJrXqtbc0uxaf+83e732DippzRxHRE6SK5qk+lA
vxEoMyUn+QHAYL46nSDM9124F3TvLNhGlLPo3trA7KyWKgVpgli/VumXNUtHao8s
lZmv0mGUfwKBgQC5HyTPdMYi1o/0Tql34YCfZ4e6tFC6YFGieeCqQfoCIRfw/o74
ow0dJnByGnf1QoYO6ufAm6uPLqTEZd7JFMFnOAE0A67n8lnTEs35LDNU+eyevb07
tYqHdyW60OIl1yRM8Br8Bcn3TvOV7tjcREyGICJyMu5j8kkWqwamu3Z7vQKBgDW9
P+I+DDQpL43RjKVnJ04muspYXlqAwJL3l7syPaMAhMyxmkBtUURLOllrlqWQSxiU
ZGMtD6/l+XFJneBaQ7JueV/88OC2mJ9JoFY+3TCPQQWOyNph5eCA7XX75j+Ld346
4ou6fXY43PnkwqjsYBB5RCOQcII5JwxfELqTQReLAoGABoVxBx6i/6oFTO+zi8AM
Th98KVLTTXTMAuo2q58fArLpBXG8d0ahgnhS9vbzTp74saF5LO5GvWUuqZN5+1S3
6jJdeApldmhDqfaLzt9SRDyD6S2TgOc1TWRcIMHGUOkRkphuKvWlctn2LQXWyBTM
siDMrbdzCev5n3RqcekeTgk=
-----END PRIVATE KEY-----
接下来假如,咱们要实现一项加密业务,于是就把私钥放在了本人手中,而公钥交给了客户。
如果咱们想给客户发送数据,就填入私钥和明文,将会生成密文:
私钥生成的密文:
Y1+RA9BUWG3I6UasSsofTgkNzT7hixSWboatYrOQd5lyGv5hxrFHOSe44fi1FAplv3wwoW13Sz4gQilwCPmt3yO/uhPvAnfnQ8dG6wkUK3bhG3wN7xsV+zaXizYCTLVd09s1edjhnlC7bCK2iffG5hVkQkqr5yfCJSDKxju5CZmXgGdz8q5RZy2z0nMQX8OMF5Ku3vOraF95iuE0x1BS900WN3Dpw4gEEkF9Y1EdV8GBl3F1q86o289PYlFAHAzLOPIP7MbqGizT+JOozQfMz5XRNj/7swEqvNGnsGgTUZ4Lz/3bDkrf6PtrecNBDN3bmNLbqOakweFJiovZkojE7Q==
咱们把这段密文粘贴到解密框,但密钥应用私钥,看看会产生什么:
答案是解密失败。
换成公钥解密呢?
就胜利了。
咱们反向操作一下,用公钥来加密数据,用私钥解密:
公钥加密的密文:
Yrazx/V6qgcWX25SY9h6jL4CptJkgtwbwZAcYkAfVJUYNpP+OhR2tW2yp63LXGhn9bby3ly7FAPmzz4oTsh/IUOvcNt/PCbGIRNti1WowmsARX3Yjvctd8DnSGaTX/DMcjjZIiLqsmvW90DmKOT3xWa0cinjceO2qLbBdcsVc19N2/Mchy4vy4RvuVmve5Um9IQfE6RjFz75uI+kM1T/r6BMoLq2uIdM6jVLmbidCgBBYa0nFLGfa3y2Q4bYMu+ixK0C8AEA7jWw6vli3mFbka0DD7U9+CfNN3LFV8PHaaKiPcN2j6rvg/jLMzi2reAyzWxcy5R+LgjTsFvOsXbLnA==
同样能够解密胜利。
三、总结
- 公钥加密的数据只能私钥解密
- 私钥加密的数据只能公钥解密
在个别的 RSA 利用场景中,公钥个别会复制多份,分发给不同客户,而私钥留在本人手中,多个公钥客户都会向私钥拥有者发送数据。这种状况下,网络中只会传输公钥加密的数据。
因而,公钥拥有者彼此之间不晓得对方发送了什么数据,保障了隐衷性。
此外,一旦公钥泄露,泄露的公钥也不能解密网络上流传的数据,不会影响密文的安全性。
参考资料:
在线密钥生成工具:http://www.metools.info/code/…
知乎 RSA 算法原理(须要高等数学根底):https://zhuanlan.zhihu.com/p/…