为什么需要向服务端添加公钥?
看关于非对称加密的技术博客,说的都是 皇帝唯一持有私钥,并把公钥公告天下,可以让平民所有。
以 git 的 pull 操作和 vscode 的 ssh 免密登录为例子:
- git pull 之前,需要把自己 pc 客户端生成的公钥上传到 github 等网站,然后才能 git pull 成功
- vscode 的 ssh 的免密登录也是需要把 pc 客户端的公钥上传到服务器的
~/.ssh/authorized_keys
文件中
这里就有古怪了呀,到底是客户端是皇帝还是服务端是皇帝呀?
按理来说,服务端是怕被黑的,所以皇帝应该是服务端才对呀。
难道说客户端和服务端是都是皇帝,且互为平民?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个比方其实不是特别恰当,因为对理解非对称加密没啥帮助。
本质上就是加密方持有公钥,用公钥加密;解密方持有私钥,用私钥解密。
加密方和解密方的身份对于一次通讯来说,是双方都具备的,所以其实有两对公私钥。
你给 GitHub 发起请求,那你就是加密方,你要用你 GitHub 的公钥加密自己的请求数据;GitHub 就是解密方,它用自己存储的私钥解密。
GitHub 给你返回响应,那 GitHub 就是加密方,GitHub 用你上传过的公钥加密它的响应数据;你就是解密方,你用自己的私钥解密,所以 GitHub 不需要知道你的私钥。
P.S. 你要是问“GitHub 的公钥哪来的?我也没下载过也没配置过啊?”这种问题的话,建议仔细回想一下首次建立一个 SSH 链接时,是不是有下面这样的提示: