您好(hǎo),歡迎來(lái)到(dào)盤龍區華銘誠泰網&φ絡工作室官方網站(zhàn)!ZJJCL.CN
新聞動态
您現(xiàn)在的(de)位置:首頁 > 技(jì)術(shù)文(wén)摘
快(kuài)速了(le)解SSH的(de)工(gōng)作(zuò)原理₩©™‌(lǐ)
來(lái)源:創立工(gōng)作(zuò)室 Ω∏≥作(zuò)者:馮軍 發布時(shí)間(ji↕$ān):2020-07-19 14:19:46 閱讀(dú) 1÷♥™→218 次

快(kuài)速了(le)解SSH的(de)工(gōng)作(zuò)原理(lǐ)


熟悉Linux的(de)人(rén)肯定都(dōu)知÷¶(zhī)道(dào)SSH。SSH是(shì)一(yī)種用(yòn↑∞g)于安全訪問(wèn)遠(yuǎn)程服務器(qì)的(de)網絡協議≠≤ ©(yì)。它将客戶端與服務端之間(jiān)∞>¥≤的(de)消息通(tōng)過加密保護起來δ₹δ'(lái),這(zhè)樣就(jiù)無法被₹€&竊取或篡改了(le)。那(nà)麽它安全性是(shì)如(₽&rú)何實現(xiàn)的(de)呢(ne§₽ )?


為(wèi)了(le)理(lǐ)解SSH,先要(yàπαπ÷o)介紹兩個(gè)重要(yào)概念:對(duì)稱加密和(hé)非對(duì)稱加密

對(duì)稱加密:


快(kuài)速了(le)解SSH的(de)工(gōng)作(zuò)原理(lǐ)


在對(duì)稱加密中,客戶端和(hé)服↑‌'務端使用(yòng)同一(yī)個(gè)密鑰對(duì☆•¶÷)數(shù)據進行(xíng)加密和(hé)解密。這(zhè)種方​λ©'法的(de)好(hǎo)處是(shì)加密強度高↑™δ(gāo),很(hěn)難破解。缺點也(yě)很(hěn)明(míng♠↕♣←)顯,即密鑰本身(shēn)容易被洩漏。因此,如(rú)何保存密鑰成為(w‌₽©βèi)了(le)關鍵問(wèn)題。于是(sh₹δ∏γì)引出了(le)第二種加密方式:非對(duì)稱加密。

非對(duì)稱加密:


快(kuài)速了(le)解SSH的(de)工(gōng)作(zuò)原理(lǐ)


在非對(duì)稱加密中有(yǒu)兩個(gè)密鑰,公鑰和($©hé)私鑰。這(zhè)兩個(gè)密鑰配對(duì)産生(shēn↕™×g)和(hé)使用(yòng)。用(yòng)公鑰加密的(de)數(shù‌↓¥)據,必須用(yòng)與其對(duì)應的(de)私鑰才能(né¥₩×ng)解開(kāi)。并且,私鑰無法通(tō Ωng)過公鑰獲取。因此,公鑰是(shì)可‍©σ(kě)以被公開(kāi)的(de),而私鑰則必須被安全存放(fàn↑↔g)。

在SSH中,非對(duì)稱加密被用(yòng)來(lái)在會(huì↑↔)話(huà)初始化(huà)階段為(wèi)通(tōng)信雙方進行(₩☆ε≠xíng)會(huì)話(huà)密鑰的(de)協商。由π"σ$于非對(duì)稱加密的(de)計(jì)算(suàn)量開(kāi ‍→)銷比較大(dà),因此一(yī)旦雙方的(de)‍​÷會(huì)話(huà)密鑰協商完成,後續的(de)加密Ω₽§都(dōu)将采用(yòng)對(duì)稱加密₹φ <來(lái)進行(xíng)。

接下(xià)來(lái),我們來(lái)看(kàn)一("•​yī)看(kàn)SSH會(huì)話(huà)建立的(de)過程。§σ 


快(kuài)速了(le)解SSH的(de)工(gōng)作(zuò)原理(lǐ)


1. 客戶端發起一(yī)個(gè)TCP連接,默&★×認端口号為(wèi)22.

2. 服務端收到(dào)連接請(qǐng)求後,λ£₩将自(zì)己的(de)一(yī)些(xiē)關鍵信息♠"¥發給客戶端。這(zhè)些(xiē)信息包括:

- 服務端的(de)公鑰:客戶端在收到(dào)₽ 這(zhè)個(gè)公鑰後,會(huì)在自(zì)己的(deα✘)“known_hosts”文(wén)件(jiàn)進行(xíng)×&搜索。如(rú)果找到(dào)了(le)相(xiàng)同的(®↓  de)公鑰,則說(shuō)明(míng)此前連接過該 ε±服務器(qì)。如(rú)果沒有(yǒu)₩↔找到(dào),則會(huì)在終端上(shàng)顯示一(y★®ī)段警告信息,由用(yòng)戶來(lái₩ "₽)決定是(shì)否繼續連接。

 coderunner@geekyshacklebol‌&t:~$ ssh geekyshacklebolt
 The authenticity ≥¶≤‍of host 'geekyshacklebolt (192.168γα.42.222)' can't be established.
 ECDSA key finge↓$♠rprint is SHA256:Ql/KnGl®δφolY9eCGuYK3OX3opnSyJQz® sbtM3DW/UZIxms.
 Are you sure yo ∑u want to continue con 'necting (yes/no)?
 
- 服務器(qì)所支持的(de)加密算(suàn)法列表:客戶端根¶$據此列表來(lái)決定采用(yòng)哪種加密算(su£₽♦àn)法。

3. 生(shēng)成會(huì)話(huà)密鑰。此時(shí),客®>₩戶端已經擁有(yǒu)了(le)服務端的(de)公鑰。接下(xi​Ωà)來(lái),客戶端和(hé)服務端需±♠✘要(yào)協商出一(yī)個(gè)雙方都(d>•∏ōu)認可(kě)的(de)密鑰,并以此來(lái)對(duì)雙方後¥₩" 續的(de)通(tōng)信內(nèi)容進行(xíng)加密。

密鑰協商是(shì)通(tōng)過Diffie - H€ δ★ellman算(suàn)法來(lái)實現π↑™ (xiàn)的(de)。具體(tǐ)過程是(s♣♥ hì):

1)服務端和(hé)客戶端共同選定一(yī)個(gè)大(dà)素數$​(shù),叫做(zuò)種子(zǐ)值;∑•σ 

2)服務端和(hé)客戶端各自(zì)獨立地(dì)選擇<>φ另外(wài)一(yī)個(gè)隻有(yǒu)自(zì£☆)己才知(zhī)道(dào)的(de)素數(shù);

3)雙方使用(yòng)相(xiàng)同的(de)$&©加密算(suàn)法(如(rú)AES),由種子(zǐ)值和(hφ&©é)各自(zì)的(de)私有(yǒu)素數(shù)生(shēng)成§ €✔一(yī)個(gè)密鑰值,并将這(zhè)個(gè)值發送給對(γ₽duì)方;

4)在收到(dào)密鑰值後,服務端和(hé)客戶端根據種子(☆≈zǐ)值和(hé)自(zì)己的(de)私有(yǒu)'¥δ素數(shù),計(jì)算(suàn)出一(yī)>∑✔個(gè)最終的(de)密鑰。這(zhè)一$•(yī)步由雙方分(fēn)别獨立進行(xíng),但(dγ•βàn)是(shì)得(de)到(dào)的(de)結果$πβ應該是(shì)相(xiàng)同的(de)。

5)雙方使用(yòng)上(shàng)一(yī)步得(de)到(d↑≤ào)的(de)結果作(zuò)為(wè≥₹≈γi)密鑰來(lái)加密和(hé)解密通(tōng)信內(nèi)容。

4. 接下(xià)來(lái),客戶端将自(zì)​λ 己的(de)公鑰id發送給服務端,服務端需要(yào)對(duì)客戶端€ ✔的(de)合法性進行(xíng)驗證:

1)服務端在自(zì)己的(de)“authorized_keys”文(wén✔★)件(jiàn)中搜索與客戶端匹配的(de)公鑰。

2)如(rú)果找到(dào)了(le),服務端用(y♣>πòng)這(zhè)個(gè)公鑰加密一(yī)個(g&‍♠è)随機(jī)數(shù),并把加密後的(de)結果發送給§∏↑客戶端。

3)如(rú)果客戶端持有(yǒu)正确的(de)私鑰,那  ☆(nà)麽它就(jiù)可(kě)以對(duì)消息進行(xíng)解密從(αγcóng)而獲得(de)這(zhè)個(gè)随機(jī)®£>數(shù)。

4)客戶端由這(zhè)個(gè)随機(jī)數(shù)和(h¥•é)當前的(de)會(huì)話(huà)密鑰共同生(shēng)成一(↕ ♣yī)個(gè)MD5值。

5)客戶端把MD5值發給服務端。

6)服務端同樣用(yòng)會(huì)話(huà)密鑰和(‌>hé)原始的(de)随機(jī)數(shù)計 ∑≥(jì)算(suàn)MD5值,并與客戶端發過來(lái)的(de)值↔≠₽進行(xíng)對(duì)比。如(rú)果相(xiàng$$)等,則驗證通(tōng)過。

至此,通(tōng)信雙方完成了(le)加密信道( ∑✘dào)的(de)建立,可(kě)以開(kāi)始正常的₩σ ε(de)通(tōng)信了(le)。

總結:

SSH巧妙地(dì)利用(yòng)了(le±λ₩α)對(duì)稱加密與非對(duì)稱加密各自(z✔π≈←ì)的(de)特點,實現(xiàn)了(✔δ$le)一(yī)套安全保密的(de)遠(yuǎn)程✔®σ控制(zhì)協議(yì)。