0

我正在对 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 吗?这样做对不对?

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

4

1 回答 1

0
> 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 行为。

于 2013-06-04T12:19:24.813 回答