我正在对 SSH 协议进行一些专有开发。
我想澄清一下消息 SSH_MSG_USERAUTH_REQUEST
根据 RFC 4252,客户端可以将以下消息发送到服务器,以验证公钥是否可以接受。
字节 SSH_MSG_USERAUTH_REQUEST 字符串 ISO-10646 UTF-8 编码的用户名 [RFC3629] 字符串 US-ASCII 字符串中的服务名称 “publickey” boolean FALSE 字符串 公钥算法名称 字符串 公钥 blob
一旦服务器使用 SSH_MSG_USERAUTH_PK_OK 正确回复了上述消息。
然后客户端发送下面描述的实际身份验证消息。
byte SSH_MSG_USERAUTH_REQUEST string user name string service name string "publickey" boolean TRUE string public key algorithm name string public key to be used for authentication string signature : This extra than first message
现在我可以看到第一条消息(没有签名)包含公钥 blob。我应该在第一条消息中验证 blob,还是应该始终跳过它并仅在实际身份验证消息期间进行验证?
我问这个是因为我已经实现了我的代码,就像它对两条消息进行验证一样。但是,每当我尝试针对 OpenSSH 进行测试时,它在第一条消息进行身份验证时失败,但总是通过第二条消息。但是我已经调试并发现 OpenSSH 没有在两条消息中发送相同的公钥 blob。所以我的问题是为什么 OpenSSH 会这样做?
OpenSSH 是否正确遵循 RFC 似乎我应该在第一条消息中跳过验证公钥 blob。如果我这样做,我不是违反 RFC 吗?这样做对不对?
请帮我解决这个问题。如果需要更多信息,请告诉我。提前致谢。