建立過程
ssh利用rsa加密的不對稱性,在兩者之間分享一把只有他們兩個人才知道的通訊金鑰,通過這個通訊金鑰,他們再進行之後的通訊。
客戶端接收服務端公鑰,把自己產生的通訊金鑰加密發給服務端,服務端用私有金鑰解密,此時兩者採用對稱金鑰通訊;
金鑰和演算法協商階段
具體步驟如下:
(1)伺服器端和客戶端分別傳送演算法協商報文給對端,報文中包含自己支援的公鑰演算法列表、加密演算法列表、mac(message authentication code,訊息驗證碼)演算法列表、壓縮演算法列表等。
(2)伺服器端和客戶端根據對端和本端支援的演算法列表得出最終使用的演算法。任何一種演算法協商失敗,都會導致伺服器端和客戶端的演算法協商過程失敗,伺服器將斷開與客戶端的連線。
(3)伺服器端和客戶端利用dh交換(diffie-hellman exchange)演算法、主機金鑰對等引數,生成會話金鑰和會話id,並完成客戶端對伺服器身份的驗證。
通過以上步驟,伺服器端和客戶端就取得了相同的會話金鑰和會話id。對於後續傳輸的資料,兩端都會使用會話金鑰進行加密和解密,保證了資料傳送的安全。會話id用來標識乙個ssh連線,在認證階段,會話id還會用於兩端的認證過程。
認證階段
ssh提供兩種認證方法:
1 password認證
利用aaa(authentication、authorization、accounting,認證、授權和計費)對客戶端身份進行認證。客戶端向伺服器發出password認證請求,將使用者名稱和密碼加密後傳送給伺服器;伺服器將該資訊解密後得到使用者名稱和密碼的明文,通過本地認證或遠端認證驗證使用者名稱和密碼的合法性,並返回認證成功或失敗的訊息。如果遠端認證伺服器要求使用者進行二次密碼認證,則會在傳送給伺服器端的認證回應訊息中攜帶乙個提示資訊,該提示資訊被伺服器端透傳給客戶端,由客戶端輸出並要求使用者再次輸入乙個指定型別的密碼,當使用者提交正確的密碼並成功通過認證伺服器的驗證後,伺服器端才會返回認證成功的訊息。
2 publickey認證
採用數字簽名的方法來認證客戶端。目前,裝置上可以利用rsa和dsa兩種公鑰演算法實現數字簽名。客戶端傳送包含使用者名稱、公鑰和公鑰演算法的publickey認證請求給伺服器端。伺服器對公鑰進行合法性檢查,如果不合法,則直接傳送失敗訊息;否則,伺服器利用數字簽名對客戶端進行認證,並返回認證成功或失敗的訊息。
第二種級別是基於密匙的安全驗證
需要依靠密匙,也就是你必須為自己建立一對密匙,並把
公用密匙放在需要訪問的伺服器上
。如果你要連線到ssh伺服器上,客戶端軟體就會向伺服器發出請求,請求用你的密匙進行安全驗證。
伺服器收到請求之後,先在該伺服器上你的主目錄下尋找你的公用密匙,然後把它和你傳送過來的公用密匙進行比較。如果兩個密匙一致,伺服器就用公用密匙加密「質詢」並把它傳送給客戶端軟體。客戶端軟體收到「質詢」之後就可以用你的私人密匙解密再把它傳送給伺服器。
用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網路上傳送口令。第二種級別不僅加密所有傳送的資料,而且「中間人」這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登入的過程可能需要10秒,但是相比輸入密碼的方式來說10秒也不長
ssh 的公鑰認證就是使用了這一特性。伺服器和客戶端都各自擁有自己的公鑰和金鑰。為了說明方便,以下將使用這些符號。
ac 客戶端公鑰
bc 客戶端金鑰
as 伺服器公鑰
bs 伺服器金鑰
在認證之前,客戶端需要通過某種方法將公鑰 ac 登入到伺服器上。
認證過程分為兩個步驟:
1 會話金鑰(session key)生成
客戶端請求連線伺服器,伺服器將 as 傳送給客戶端。
伺服器生成會話id(session id),設為 p,傳送給客戶端。
客戶端生成會話金鑰(session key),設為 q,並計算 r = p xor q。
客戶端將 r 用 as 進行加密,結果傳送給伺服器。
伺服器用 bs 進行解密,獲得 r。
伺服器進行 r xor p 的運算,獲得 q。
至此伺服器和客戶端都知道了會話金鑰q,以後的傳輸都將被 q 加密。
2 認證
伺服器生成隨機數 x,並用 ac 加密後生成結果 s(x),傳送給客戶端
客戶端使用 bc 解密 s(x) 得到 x
客戶端計算 q + x 的 md5 值 n(q+x),q為上一步得到的會話金鑰
伺服器計算 q + x 的 md5 值 m(q+x)
客戶端將 n(q+x) 傳送給伺服器
伺服器比較 m(q+x) 和 n(q+x),兩者相同則認證成功
ssh 公鑰私鑰認證原理
通常,通過ssh登入遠端伺服器時,使用密碼認證,分別輸入使用者名稱和密碼,兩者滿足一定規則就可以登入。但是密碼認證有以下的缺點 而使用公鑰認證則可以解決上述問題。所謂的公鑰認證,實際上是使用一對加密字串,乙個稱為公鑰 public key 任何人都可以看到其內容,用於加密 另乙個稱為金鑰 priva...
ssh 公鑰私鑰認證原理
通常,通過ssh登入遠端伺服器時,使用密碼認證,分別輸入使用者名稱和密碼,兩者滿足一定規則就可以登入。但是密碼認證有以下的缺點 而使用公鑰認證則可以解決上述問題。所謂的公鑰認證,實際上是使用一對加密字串,乙個稱為公鑰 public key 任何人都可以看到其內容,用於加密 另乙個稱為金鑰 priva...
SSH公鑰登入原理
通常我們使用xshell登入ssh時,有兩種方式 一 密碼口令 類似於賬號密碼登入 1.客戶端連線上伺服器,伺服器把公鑰發給客戶端。2.客戶端用伺服器公鑰加密,上傳密碼。3.伺服器用私鑰解密,如果匹配,則連線。二 金鑰登入 一般使用rsa公鑰私鑰技術。1.生成金鑰對。2.將公鑰資訊寫入目標使用者的金...