您好(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ú) 119≥€₽8 次

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


熟悉Linux的(de)人(rén)肯定都(dōu)知(zhī)道(dào)SSH。SSH是(₩β∑shì)一(yī)種用(yòng)于安全訪問(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ē±∞↕ng)和(hé)使用(yòng)。用(yòng)公鑰加密的(de)數(shù&§↑)據,必須用(yòng)與其對(duì)應的(de)私鑰才能(néng)解開( γkāi)。并且,私鑰無法通(tōng)過公鑰獲取。因此,λ€'公鑰是(shì)可(kě)以被公開(kāi)的(de),而私♣↓¶鑰則必須被安全存放(fàng)。

在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)對(d>α‍∏uì)稱加密來(lái)進行(xíng)。

接下(xià)來(lái),我們來(lái)看(kàn)一(yī)看(kàn)SSH會(h₩®uì)話(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@geekysha™παcklebolt:~$ ssh geekyshacklebo£×‍lt
 The authenticity of host 'geekyshacklebolt'±Ω← (192.168.42.222)' can't be established.
 ECDSA key fingerprint is SHA2  ∑∏56:Ql/KnGlolY9eCGuYK3OX3opnSyJQzsbtM3D♦£♥W/UZIxms.
 Are you sure you want to continue connecti©₽ng (yes/no)?
 
- 服務器(qì)所支持的(de)加密算(suàn)法列表:∞§客戶端根據此列表來(lái)決定采用(yòng)哪種加密算(s€'$εuà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 - Hellma₹÷‍n算(suàn)法來(lái)實現(xiàn)的(de)。具體(tǐ)過程是(shì):

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è)密鑰值,并将這(z€®hè)個(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ì)。