【问题标题】:SSH RFC User authentication Message SSH_MSG_USERAUTH_REQUESTSSH RFC 用户认证消息 SSH_MSG_USERAUTH_REQUEST
【发布时间】:2013-05-30 17:44:20
【问题描述】:

我正在做一些关于 SSH 协议的专有开发。

我想澄清一下消息 SSH_MSG_USERAUTH_REQUEST

根据 RFC 4252,客户端可以将以下消息发送到服务器,以验证公钥是否可以接受。

字节 SSH_MSG_USERAUTH_REQUEST ISO-10646 UTF-8 编码的字符串用户名 [RFC3629] US-ASCII 字符串服务名称 字符串“公钥” 布尔值 FALSE 字符串公钥算法名称 字符串公钥 blob

一旦服务器使用 SSH_MSG_USERAUTH_PK_OK 正确回复上述消息。

然后客户端发送如下所述的实际身份验证消息。

字节 SSH_MSG_USERAUTH_REQUEST 字符串用户名 字符串服务名称 字符串“公钥” 布尔值 TRUE 字符串公钥算法名称 用于身份验证的字符串公钥 字符串签名 :这不是第一条消息

现在我可以看到第一条消息(没有签名)包含公钥 blob。 我应该在第一条消息中验证 blob,还是应该始终跳过它并仅在实际身份验证消息期间进行验证?

我问这个是因为我已经实现了我的代码,就像它对两条消息进行验证一样。但是,每当我尝试针对 OpenSSH 进行测试时,它在第一条消息进行身份验证时失败,但总是通过第二条消息。但是我已经调试并发现 OpenSSH 没有在两条消息中发送相同的公钥 blob。所以我的问题是为什么 OpenSSH 会这样做?

OpenSSH 是否正确遵循 RFC,然后似乎我应该在第一条消息中跳过验证公钥 blob。如果我这样做,我不是违反 RFC 吗?这样做对不对?

请帮我解决这个问题。 如果需要更多信息,请告诉我。 提前致谢。

【问题讨论】:

    标签: ssh public-key-encryption ssh-keys public-key


    【解决方案1】:
    > Now I can see first message (without signature) contains publickey blob. 
    > Should I verify the blob in first message or I should always skip that and
    > do verification only during actual authentication message ?
    

    不清楚您对第一条消息的“验证”是什么意思, 但是,对于该消息,sshd 只会检查给定的公钥 blob 是否存在于 ~/.ssh/authorized_keys 文件中。如果该文件中存在,ssh 客户端将收到 SSH_MSG_USERAUTH_PK_OK 。

    > However i have debugged and found out OpenSSH is not sending same publickey
    > blob in both message. so my question is why OpenSSH is doing so ?
    

    我从头开始用 Java 实现了一个 ssh 客户端,但我没有认识到这种 OpenSSH 行为。

    【讨论】:

    • 我正在实现 SSH 服务器,并且我观察到了 OpenSSH 客户端的行为。我想你已经用 OpenSSH 服务器测试了你的客户端。
    • 但是我也检查了 OpenSSH 代码,我发现,作为 OpenSSH 服务器,他们不会在第一条消息中检查公钥 blob。它们只是验证第二条消息的公钥。 :)
    • “检查第一条消息中的公钥 blob”是什么意思?您在没有签名的情况下尝试过哪种检查或验证?
    • 参考OpenSSH的sshconnect2.c中的send_pubkey_test()和sign_and_send_pubkey()。 OpenSSH客户端会做出这样的行为让我难以置信。
    • """你是什么意思'检查第一条消息中的公钥 blob'?你在没有签名的情况下尝试过什么样的检查或验证?- ymnk """"" 在我的服务器中,我在安装密钥后保留生成的哈希,所以我检查哈希而不是检查大长度密钥。当我收到第一条消息时,我正在尝试比较接收到的密钥和已安装密钥的哈希值。但是 OpenSSH 客户端发送了不同的公钥 blob,所以这个检查失败了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2012-02-12
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    相关资源
    最近更新 更多