【问题标题】:How to generate a client ssh key at each connection?如何在每个连接处生成客户端 ssh 密钥?
【发布时间】:2011-11-28 15:13:32
【问题描述】:

目前,我认为在客户端使用的公钥被重复使用了多次(也许只要配置不改变我认为)。我假设我们使用的是密码方法。

这让我很担心。我希望我的 ssh 客户端在每个连接上自动生成一个 RSA 密钥(但客户端密钥必须保持不变以确保真实性和

这可能吗?

谢谢。

编辑:请参阅评论 #3。

【问题讨论】:

  • 近距离投票?作为程序员,SSH不是必备工具吗?
  • 这个问题有几件事没有意义。您询问公钥身份验证,然后说您假设密码身份验证。然后你说你希望客户端每次都生成一个新的密钥,但是客户端的密钥不能改变。请澄清问题。
  • 当然是密码认证。但我对如何协商协议 很感兴趣。在此身份验证期间,客户端(或服务器,我不知道)发送一个公钥,该公钥允许交换对称密钥以加密主机和客户端之间的每个数据。我想知道客户端是否发送了公钥,如果是,是否经常更改此公钥。
  • @Creasixtine 9 年后找到解决方案了吗?

标签: security authentication privacy ssh-keys ca


【解决方案1】:

SSH 中的公钥用于识别客户端。 私钥用于证明用户不是冒名顶替者。

服务器只知道公钥。如果您为每个连接更改它,就像为每个连接更改您的用户名一样。所以服务器知道用户“john”,但是你说“I'm Joe”。不管你能不能证明你是乔,服务器不认识你,所以它不会让你进来。

这与 SSL 不同,您使用签名证书来证明您的身份,因此您可以随时更改密钥。在这里,公钥是您身份的一部分,因此您必须为每个连接使用同一个。

【讨论】:

    【解决方案2】:

    您缺少的是公钥和私钥以加密方式相互绑定。生成私钥时,相应的公钥也随之生成。用一把钥匙加密东西,只能用另一把钥匙解密。由于这种加密关系,任何拥有公钥的人都可以验证消息只能来自拥有私钥的人。

    当 SSH 会话启动时,每一方都使用此属性来验证另一方。在握手期间,一个秘密(从技术上讲,它被称为“随机数”,它基本上是一个随机数)用接收者的公钥加密,然后用发送者的私钥签名。收到此信息后,接收者 a) 可以使用发送者的公钥验证签名; b) 是唯一可以解密消息的人。这验证了交换。如果这种握手发生在两个方向上,那么双方就有可能相互验证。这称为相互身份验证。

    因此,重要的不是密钥的,而是绑定公钥和私钥的密码学原理。此过程提供了创建随机会话密钥并使用公钥/私钥对安全地交换它的能力,并且是 SSH(或 SSL 或 TLS)如何启动会话的核心。

    这意味着您的问题的答案是,如果 SSH 设置为相互身份验证(即您不需要输入密码),您的客户端的公钥必须在服务器的密钥库中。由于您无法在不更改私钥的情况下更改公钥,因此每次更改密钥时都需要在服务器上重新加载公钥。

    【讨论】:

      【解决方案3】:

      如果您使用密码验证,则不使用客户端 RSA 密钥。如果您使用公钥身份验证,客户端密钥显然不能每次都更改,因为服务器需要已经知道它才能对您进行身份验证。

      您似乎对 SSH 协议有很深的误解。我只能建议阅读 RFC 4252 来澄清事情。

      【讨论】:

        猜你喜欢
        • 2014-04-09
        • 1970-01-01
        • 1970-01-01
        • 2014-07-02
        • 2016-03-03
        • 2019-04-13
        • 1970-01-01
        • 1970-01-01
        • 2011-11-10
        相关资源
        最近更新 更多