【发布时间】: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