2013-06-04 30 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