2013-06-04 29 views
0

我正在开发一些SSH协议的专有开发。SSH RFC用户认证消息SSH_MSG_USERAUTH_REQUEST

我想要一个澄清消息SSH_MSG_USERAUTH_REQUEST

按照RFC 4252,客户可以在下面留言寄这封信给服务器只验证公钥是否可以接受与否。

字节SSH_MSG_USERAUTH_REQUEST 字符串用户在ISO-10646 UTF-8编码名称[RFC3629]在US-ASCII 字符串 “公钥” 布尔FALSE 串公共密钥算法的名称 串公共密钥团 弦业务名称

一旦上面的消息被服务器用SSH_MSG_USERAUTH_PK_OK正确回复。

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

字节SSH_MSG_USERAUTH_REQUEST 字符串用户名 弦业务名称 字符串“公钥” 布尔TRUE 串公共密钥算法的名称 串公钥用于认证 特征码:这种额外的比第一条消息

现在我可以看到第一条消息(没有签名)包含publickey blob。 我应该在第一封邮件中验证blob,还是应该总是跳过该内容,并仅在实际验证邮件中进行验证?

我在问这个,因为我已经实现了我的代码,就像它对两个消息进行验证一样。但是,无论何时我尝试对OpenSSH进行测试,它都会在第一条认证消息上失败,但总是通过第二条消息传递。然而,我已经调试,发现OpenSSH不是在两个消息中发送相同的publickey blob。所以我的问题是为什么OpenSSH这样做?

是否OpenSSH正确地遵循RFC,然后看起来我应该跳过在第一封邮件中验证publickey blob。如果我这样做,我不打破RFC?这样做是对还是不对?

请帮我解决此查询。 如果需要更多信息,请让我知道。 在此先感谢。

回答

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的将只检查是否在的〜/ .ssh/authorized_keys的文件存在给定的公钥BLOB。如果它存在于该文件中,则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行为。

+0

我正在实施SSH服务器,我观察到OpenSSH客户端行为。我认为你已经用OpenSSH服务器测试过你的客户端。 –

+0

但是我已经检查过OpenSSH代码,并且我发现,作为OpenSSH服务器,他们在第一封邮件中不检查publickey blob。他们只验证第二条消息publickey。:) –

+0

你是什么意思'检查第一个消息中的公钥BLOB'?什么样的检查或验证你尝试没有签名? – ymnk