为什么需要向服务端添加公钥?

发布于 2022-09-13 01:17:38 字数 373 浏览 28 评论 0

看关于非对称加密的技术博客,说的都是 皇帝唯一持有私钥,并把公钥公告天下,可以让平民所有。

以 git 的 pull 操作和 vscode 的 ssh 免密登录为例子:

  • git pull 之前,需要把自己 pc 客户端生成的公钥上传到 github 等网站,然后才能 git pull 成功
  • vscode 的 ssh 的免密登录也是需要把 pc 客户端的公钥上传到服务器的 ~/.ssh/authorized_keys 文件中

这里就有古怪了呀,到底是客户端是皇帝还是服务端是皇帝呀?

按理来说,服务端是怕被黑的,所以皇帝应该是服务端才对呀。

难道说客户端和服务端是都是皇帝,且互为平民?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云裳 2022-09-20 01:17:38

这个比方其实不是特别恰当,因为对理解非对称加密没啥帮助。

本质上就是加密方持有公钥,用公钥加密;解密方持有私钥,用私钥解密

加密方和解密方的身份对于一次通讯来说,是双方都具备的,所以其实有两对公私钥

你给 GitHub 发起请求,那你就是加密方,你要用你 GitHub 的公钥加密自己的请求数据;GitHub 就是解密方,它用自己存储的私钥解密。

GitHub 给你返回响应,那 GitHub 就是加密方,GitHub 用你上传过的公钥加密它的响应数据;你就是解密方,你用自己的私钥解密,所以 GitHub 不需要知道你的私钥。

P.S. 你要是问“GitHub 的公钥哪来的?我也没下载过也没配置过啊?”这种问题的话,建议仔细回想一下首次建立一个 SSH 链接时,是不是有下面这样的提示:

The authenticity of host 'example.com (11.22.33.44)' can't be established.
RSA key fingerprint is 99:88:77:66:55:44:33:22:11:00:aa:bb:cc:dd:ee:ff.
Are you sure you want to continue connecting (yes/no)?
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文