SSH協議握手過程詳解

簡介

ssh通過創建安全隧道來實現ssh客戶端與服務器之間的連接,
它的主要用途是連接遠程服務器然後在上面執行指令。

協議

ssh協議主要由三部分組成:

  • 傳輸層協議:主要負責認證服務器、加密數據、確保數據完整性
  • 用戶身份驗證協議:負責認證使用者是否是ssh服務器的用戶
  • 連接協議:將加密的信息通道改成若干個邏輯通道

傳輸層協議

在這裏插入圖片描述
今天主要講一下傳輸層協議。

建立連接

sever收到來自client發送過來的請求後,先進行三次握手,建立tcp連接,下面給出我使用wireshark抓到的包
tcp

算法協商、版本協商

雙方發送自己所支持的版本號以及算法,協商確定版本及算法,若成功則繼續,否則斷開連接
init
版本
在這裏插入圖片描述
在這裏插入圖片描述

密鑰交換

client根據server發送過來的數據生成一對密鑰,將公鑰發送給server
在這裏插入圖片描述
在這裏插入圖片描述
其中有一個e字段,這個就是client所生成的公鑰
server也會生成一對密鑰,並且將自己的公鑰與client發送過來的公鑰一起生成共享密鑰,並且會將自己的臨時公鑰以及host-key,還有server會收集雙方的臨時公鑰、共享密鑰、host-key再加上一定的數據例如:server和client的版本字符串,對這些數據使用之前它們協商好的哈希算法計算其哈希值,然後使用自己的私鑰對其簽名生成signature,然後將這些值一起發送給client
在這裏插入圖片描述
client收到後會通過host-key先驗證服務器的身份,然後將其保存到本地文件夾中,再使用server發送過來的臨時公鑰生成共享密鑰,再加密簽名,將其結果與自己所計算的哈希值進行比較,驗證數據時沒有問題的,這樣的話整個密鑰協商環節就結束了。

一旦建立了加密傳輸層並且驗證了server的身份,client就必須進行身份驗證,主要有兩種方式:

  • 密碼身份驗證:主要就是加密密碼進行傳輸
  • 密鑰對認證:客戶端生成密鑰對然後將公鑰發送給server,server將其存儲起來並生成對應的id,將id返回給client,之後client則可以通過id進行驗證server是否存在自己的公鑰,進而驗證身份。

總結

我通過wireshark可以很好的看到密鑰協商具體過程的數據,讓我更好的去理解這個過程,但是我的目的是去提取過程中的數據,到目前還沒有找到相應的解決辦法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章