RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1584204
Accepted
Боков Глеб
Боков Глеб
Asked:2024-06-17 18:18:29 +0000 UTC2024-06-17 18:18:29 +0000 UTC 2024-06-17 18:18:29 +0000 UTC

用于非对称加密的服务器密钥在哪里以及如何制作?

  • 772

有很多关于如何使用 SSH 密钥建立与 VPS 的连接的材料(高质量文章的示例)。简而言之,使用ssh-keygen实用程序,您需要生成一对密钥(公钥和私钥),然后以某种方式将打开的密钥上传到 VPS。

根据该视频的解释,

像往常一样,我们通过不安全的通道(即互联网连接)传输数据包。我们使用公钥加密每个数据包,并使用私钥进行解密。公钥是公开的,万一有人拿到了也不可怕。它可以加密消息,但不能解密。

连接中的每个参与者都会创建一个公钥-私钥对,然后双方交换各自的公钥。

从逻辑角度来看,第一点难以理解的是,如果说密钥交换,为什么在本地机器和 VPS 上有一份公钥副本?原来客户端和服务器都用同一个公钥加密数据包?

但最重要的是:我们的说明中哪里提到了为服务器创建密钥对?我们在本地计算机上创建密钥并将公共密钥上传到服务器,以便可以解密来自服务器的响应。但是,如果没有私钥,服务器如何解密来自客户端的消息呢?

由于数据不可能以明文形式发送到服务器,因此我们只能断定VPS最初有私钥。但它与我们之前创建的公钥匹配吗?

ssh
  • 1 1 个回答
  • 62 Views

1 个回答

  • Voted
  1. Best Answer
    Pak Uula
    2024-06-25T19:54:33Z2024-06-25T19:54:33Z

    让我们从这个解释不正确的事实开始:

    像往常一样,我们通过不安全的通道(即互联网连接)传输数据包。我们使用公钥加密每个数据包,并使用私钥进行解密。

    所有流量均使用对称加密算法进行加密(请参阅RFC 4253,第 6.3 节),其密钥是在密钥交换期间根据每个会话生成的。该标准要求所有客户端和服务器支持 Diffie-Hellman 方案来生成密钥。

    非对称服务器密钥在服务器配置文件中指定/etc/ssh/sshd_config。默认情况下,Debian/Ubuntu 中有三个密钥:椭圆曲线 (ECDSA)、Edwards 曲线 (Ed25519) 和 RSA 密钥

    /etc/ssh/ssh_host_ecdsa_key
    /etc/ssh/ssh_host_ecdsa_key.pub
    /etc/ssh/ssh_host_ed25519_key
    /etc/ssh/ssh_host_ed25519_key.pub
    /etc/ssh/ssh_host_rsa_key
    /etc/ssh/ssh_host_rsa_key.pub
    

    这些密钥是在安装 Linux 时生成的。例如,在Debian中,在安装过程中执行命令

    dpkg-reconfigure openssh-server
    

    该命令打印密钥类型、位数、SHA1 哈希值。就像是:

    Creating SSH2 RSA key; this may take some time ...
    2048 SHA256:BLUkgjGdbcFX9wCsfOoIG4gtkdSeex4K/xcnsRo0qEA root@server (RSA)
    Creating SSH2 ECDSA key; this may take some time ...
    256 SHA256:Rh6izWEXkCV6HZLIpzlGQje178vhDgb77ItaZgpDsIQ root@server (ECDSA)
    Creating SSH2 ED25519 key; this may take some time ...
    256 SHA256:UD4b7njwxWp1Q3wYf2R//udgPRzfGaeZ/6kE3VgZM+s root@server (ED25519)
    

    ssh-keygen当然,里面是霓虹灯。如果您对密钥的生成方式感兴趣,请查看debian/openssh-server.postinst包源中的脚本openssh

    当然,这些密钥与任何客户端密钥都不匹配。这些密钥用于确认服务器的真实性。当您第一次连接到服务器时,ssh 客户端会问您 - 您确定正确的服务器回答了您吗?

    The authenticity of host '<name> (<address>)' can't be established.
    ECDSA key fingerprint is SHA256:Rh6izWEXkCV6HZLIpzlGQje178vhDgb77ItaZgpDsIQ.
    Are you sure you want to continue connecting (yes/no)?
    

    ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub此对话假设您从某处知道服务器密钥的哈希值(您可以使用服务器上的命令找到它)如果您回答y,客户端会将生成的公钥保存到数据库中$HOME/.ssh/known_hosts:

    Warning: Permanently added '<IP ADDRESS>' (ECDSA) to the list of known hosts.
    

    回答你的最后一个问题:是的,服务器最初有私钥。它们是在安装包时生成的openssh-server。是的,这些密钥与您在客户端生成的密钥完全不同。

    仅当您想在没有密码的情况下使用密钥进行身份验证时,客户端的公钥才会上传到服务器(这是正确的!我支持您)。此外,它不是随处下载,而是添加到$HOME/.ssh/authorized_keys.假设只有用户有权访问该文件,因此可以信任该文件中的密钥。

    但一般情况下,不需要将客户端的公钥上传到服务器。大多数服务器支持用户/密码身份验证,不需要公钥。

    • 2

相关问题

  • 设置远程连接

  • gitlab 访问

  • free.sprinthost 及其 ssh

  • 无法通过 ssh 从外部访问 Mikrotik 本身

  • 添加新的 ssh 密钥

  • 在哪里托管 httpd.conf?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5