知識(shí)改變命運(yùn),技術(shù)就是要分享,有問題隨時(shí)聯(lián)系,免費(fèi)答疑,歡迎聯(lián)系!????
SSH(Secure Shell,安全外殼)是一種網(wǎng)絡(luò)安全協(xié)議,通過加密和認(rèn)證機(jī)制實(shí)現(xiàn)安全的訪問和文件傳輸?shù)葮I(yè)務(wù)。傳統(tǒng)遠(yuǎn)程登錄和文件傳輸方式,例如Telnet、FTP,使用明文傳輸數(shù)據(jù),存在很多的安全隱患。隨著人們對(duì)網(wǎng)絡(luò)安全的重視,這些方式已經(jīng)慢慢不被接受。SSH協(xié)議通過對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行加密和驗(yàn)證,在不安全的網(wǎng)絡(luò)環(huán)境中提供了安全的網(wǎng)絡(luò)服務(wù)。作為Telnet和其他不安全遠(yuǎn)程shell協(xié)議的安全替代方案,目前SSH協(xié)議已經(jīng)被全世界廣泛使用,大多數(shù)設(shè)備都支持SSH功能。
為什么需要SSH?
傳統(tǒng)的互聯(lián)網(wǎng)通信使用明文傳輸數(shù)據(jù),內(nèi)容一旦被截獲就會(huì)完全暴露,存在很多安全隱患。SSH協(xié)議通過對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行加密和驗(yàn)證,建立SSH客戶端和SSH服務(wù)器之間的安全隧道,在不安全的網(wǎng)絡(luò)環(huán)境中為網(wǎng)絡(luò)服務(wù)提供了安全的傳輸通道。
SSH最常用的場(chǎng)景是遠(yuǎn)程登錄和文件傳輸。在SSH協(xié)議出現(xiàn)之前,Telnet廣泛應(yīng)用于遠(yuǎn)程登錄場(chǎng)景,為遠(yuǎn)程管理網(wǎng)絡(luò)設(shè)備提供了極大便利,而FTP作為常用的文件傳輸協(xié)議,兼具操作簡單和傳輸效率高的優(yōu)點(diǎn),但它們都存在相同的問題,即明文傳輸數(shù)據(jù)帶來的安全隱患。SSH采用加密傳輸數(shù)據(jù)、提升認(rèn)證強(qiáng)度等手段,克服了Telnet和FTP應(yīng)用中的安全性問題,實(shí)現(xiàn)了安全的遠(yuǎn)程登錄和文件傳輸業(yè)務(wù)。
SSH常用場(chǎng)景
SSH是如何工作的?
SSH由服務(wù)器和客戶端組成,為建立安全的SSH通道,雙方需要先建立TCP連接,然后協(xié)商使用的版本號(hào)和各類算法,并生成相同的會(huì)話密鑰用于后續(xù)的對(duì)稱加密。在完成用戶認(rèn)證后,雙方即可建立會(huì)話進(jìn)行數(shù)據(jù)交互。SSH的工作流程包括如下幾個(gè)階段。
SSH工作流程
連接建立
SSH依賴端口進(jìn)行通信。在未建立SSH連接時(shí),SSH服務(wù)器會(huì)在指定端口偵聽連接請(qǐng)求,SSH客戶端向SSH服務(wù)器該指定端口發(fā)起連接請(qǐng)求后,雙方建立一個(gè)TCP連接,后續(xù)會(huì)通過該端口通信。
默認(rèn)情況下,SSH服務(wù)器使用端口號(hào)22。當(dāng)SSH應(yīng)用于NETCONF時(shí),可以指定默認(rèn)端口號(hào)是22或者830。SSH使用的端口號(hào)可以被更改為設(shè)備其他可用端口,更改后當(dāng)前所有的連接都會(huì)斷開,SSH服務(wù)器開始偵聽新的端口。由于SSH默認(rèn)端口號(hào)22為知名端口,在進(jìn)行關(guān)鍵安全傳輸時(shí),建議修改SSH端口號(hào)。
版本協(xié)商
SSH協(xié)議目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0協(xié)議相比SSH1.X協(xié)議來說,在結(jié)構(gòu)上做了擴(kuò)展,可以支持更多的認(rèn)證方法和密鑰交換方法,同時(shí)提高了服務(wù)能力。SSH服務(wù)器和客戶端通過協(xié)商確定最終使用的SSH版本號(hào),過程如下:
1. SSH服務(wù)器通過建立好的連接向SSH客戶端發(fā)送支持的SSH版本信息。
2. SSH客戶端收到版本信息后,根據(jù)自身支持的SSH版本決定使用的版本號(hào),并將決定使用的版本號(hào)發(fā)送給SSH服務(wù)器。
3. SSH服務(wù)器判斷自己是否支持客戶端決定使用的版本號(hào),從而確定版本協(xié)商是否成功。
算法協(xié)商
SSH工作過程中需要使用多種類型的算法,包括用于產(chǎn)生會(huì)話密鑰的密鑰交換算法、用于數(shù)據(jù)信息加密的對(duì)稱加密算法、用于進(jìn)行數(shù)字簽名和認(rèn)證的公鑰算法和用于數(shù)據(jù)完整性保護(hù)的HMAC算法。SSH服務(wù)器和客戶端對(duì)每種類型中具體算法的支持情況不同,因此雙方需要協(xié)商確定每種類型中最終使用的算法,過程如下:
1. SSH服務(wù)器和客戶端分別向?qū)Ψ桨l(fā)送自己支持的算法。
2. SSH服務(wù)器和客戶端依次協(xié)商每種類型中具體使用的算法。在每類算法的協(xié)商過程中,SSH服務(wù)器和客戶端都會(huì)匹配出雙方均支持的算法作為最終使用的算法。每類算法均匹配成功后,算法協(xié)商完成。如果某類算法全部匹配失敗,則該類型的算法協(xié)商失敗,這會(huì)導(dǎo)致SSH服務(wù)器和客戶端之間算法協(xié)商失敗并斷開連接。
密鑰交換
SSH服務(wù)器和客戶端通過密鑰交換算法,動(dòng)態(tài)生成共享的會(huì)話密鑰和會(huì)話ID,建立加密通道。會(huì)話密鑰主要用于后續(xù)數(shù)據(jù)傳輸?shù)募用埽瑫?huì)話ID用于在認(rèn)證過程中標(biāo)識(shí)該SSH連接。
由于SSH服務(wù)器和客戶端需要持有相同的會(huì)話密鑰用于后續(xù)的對(duì)稱加密,為保證密鑰交換的安全性,SSH使用一種安全的方式生成會(huì)話密鑰,由SSH服務(wù)器和客戶端共同生成會(huì)話密鑰,利用數(shù)學(xué)理論巧妙地實(shí)現(xiàn)不直接傳遞密鑰的密鑰交換,無需通過不安全通道傳送該密鑰,具體過程如下圖所示。
SSH密鑰交換
1. SSH服務(wù)器生成素?cái)?shù)G、P、服務(wù)器私鑰b,并計(jì)算得到服務(wù)器公鑰y=(G^b)%P。
2. SSH服務(wù)器將素?cái)?shù)G、P、服務(wù)器公鑰y發(fā)送給SSH客戶端。
3. SSH客戶端生成客戶端私鑰a,計(jì)算得到客戶端公鑰x=(G^a)%P。
4. SSH客戶端將客戶端公鑰x發(fā)送給SSH服務(wù)器。
5. SSH服務(wù)器計(jì)算得到對(duì)稱密鑰K=(x^b)%P,SSH客戶端計(jì)算得到對(duì)稱密鑰K=(y^a)%P,數(shù)學(xué)定律可以保證SSH服務(wù)器和SSH客戶端生成的對(duì)稱密鑰相同。
用戶認(rèn)證
SSH客戶端向SSH服務(wù)器發(fā)起認(rèn)證請(qǐng)求,SSH服務(wù)器對(duì)SSH客戶端進(jìn)行認(rèn)證。SSH支持以下幾種認(rèn)證方式:
- 密碼(password)認(rèn)證:客戶端通過用戶名和密碼的方式進(jìn)行認(rèn)證,將加密后的用戶名和密碼發(fā)送給服務(wù)器,服務(wù)器解密后與本地保存的用戶名和密碼進(jìn)行對(duì)比,并向客戶端返回認(rèn)證成功或失敗的消息。
- 密鑰(publickey)認(rèn)證:客戶端通過用戶名,公鑰以及公鑰算法等信息來與服務(wù)器進(jìn)行認(rèn)證。
- password-publickey認(rèn)證:指用戶需要同時(shí)滿足密碼認(rèn)證和密鑰認(rèn)證才能登錄。
- all認(rèn)證:只要滿足密碼認(rèn)證和密鑰認(rèn)證其中一種即可。
SSH用戶認(rèn)證最基本的兩種方式是密碼認(rèn)證和密鑰認(rèn)證。密碼認(rèn)證方式比較簡單,且每次登錄都需要輸入用戶名和密碼。而密鑰認(rèn)證可以實(shí)現(xiàn)安全性更高的免密登錄,是一種廣泛使用且推薦的登錄方式。
密碼認(rèn)證
密碼認(rèn)證的基本原理是SSH客戶端使用服務(wù)器公鑰對(duì)密碼進(jìn)行加密,SSH服務(wù)器使用服務(wù)器私鑰解密后驗(yàn)證密碼的合法性,具體過程如下圖所示。
SSH密碼認(rèn)證登錄流程
1. SSH客戶端向SSH服務(wù)器發(fā)送登錄請(qǐng)求。
2. SSH服務(wù)器將服務(wù)器公鑰發(fā)送給SSH客戶端。
3. SSH客戶端輸入密碼,使用服務(wù)器公鑰加密密碼后發(fā)送給SSH服務(wù)器。
4. SSH服務(wù)器收到密文,使用服務(wù)器私鑰解密得到密碼。驗(yàn)證密碼是否正確,如果正確則認(rèn)證通過。
但是,這種認(rèn)證方式存在中間人攻擊的風(fēng)險(xiǎn),如果有人截獲了SSH客戶端的登錄請(qǐng)求后,冒充SSH服務(wù)器將偽造的公鑰發(fā)送給SSH客戶端,就可以獲取到用戶的登錄密碼。所以,在首次登錄SSH服務(wù)器時(shí),SSH客戶端上會(huì)提示公鑰指紋,并詢問用戶是否確認(rèn)登錄。用戶確認(rèn)后公鑰將被保存并信任,下次訪問時(shí),SSH客戶端將會(huì)核對(duì)SSH服務(wù)器發(fā)來的公鑰和本地保存的是否相同。這種方式適用于公布了公鑰指紋的SSH服務(wù)器以及已登錄過正確SSH服務(wù)器的SSH客戶端。
密鑰認(rèn)證
為避免中間人攻擊,可以使用安全性更高的密鑰認(rèn)證。密鑰認(rèn)證的基本原理是SSH服務(wù)器使用客戶端的公鑰對(duì)隨機(jī)內(nèi)容加密,SSH客戶端使用自己的私鑰解密并發(fā)送給服務(wù)器以證實(shí)自己的身份,具體的過程如下圖所示。
SSH密鑰認(rèn)證登錄流程
1. 在進(jìn)行SSH連接之前,SSH客戶端需要先生成自己的公鑰私鑰對(duì),并將自己的公鑰存放在SSH服務(wù)器上。
2. SSH客戶端向SSH服務(wù)器發(fā)送登錄請(qǐng)求。
3. SSH服務(wù)器根據(jù)請(qǐng)求中的用戶名等信息在本地搜索客戶端的公鑰,并用這個(gè)公鑰加密一個(gè)隨機(jī)數(shù)發(fā)送給客戶端。
4. SSH客戶端使用自己的私鑰對(duì)返回信息進(jìn)行解密,并發(fā)送給SSH服務(wù)器。
5. SSH服務(wù)器驗(yàn)證SSH客戶端解密的信息是否正確,如果正確則認(rèn)證通過。
會(huì)話請(qǐng)求
認(rèn)證通過后,SSH客戶端向服務(wù)器發(fā)送會(huì)話請(qǐng)求,請(qǐng)求服務(wù)器提供某種類型的服務(wù),即請(qǐng)求與服務(wù)器建立相應(yīng)的會(huì)話。服務(wù)器根據(jù)客戶端請(qǐng)求進(jìn)行回應(yīng)。
會(huì)話交互
會(huì)話建立后,SSH服務(wù)器端和客戶端在該會(huì)話上進(jìn)行數(shù)據(jù)信息的交互,雙方發(fā)送的數(shù)據(jù)均使用會(huì)話密鑰進(jìn)行加解密。
常用SSH連接工具:PuTTY和OpenSSH
由于SSH是一套協(xié)議標(biāo)準(zhǔn),需要依賴基于SSH實(shí)現(xiàn)的工具完成SSH客戶端和SSH服務(wù)器之間的連接,PuTTY和OpenSSH應(yīng)運(yùn)而生。
PuTTY是Windows上經(jīng)典的免費(fèi)SSH連接工具,通常用于使用SSH協(xié)議遠(yuǎn)程登錄設(shè)備,最新版本可以在PuTTY下載。
OpenSSH是SSH協(xié)議的開源實(shí)現(xiàn),支持在Unix操作系統(tǒng)上運(yùn)行,最新版本可以在OpenSSH下載。目前Windows10已經(jīng)包含OpenSSH客戶端和服務(wù)器軟件,可在“設(shè)置—應(yīng)用—應(yīng)用與功能—可選功能”中搜索安裝。
SSH和SSL的區(qū)別
SSH和SSL都是網(wǎng)絡(luò)安全協(xié)議,通過加密和認(rèn)證提升兩臺(tái)設(shè)備間傳輸數(shù)據(jù)的安全性。但SSH和SSL的生效方式和服務(wù)目標(biāo)存在差異。
SSH在兩臺(tái)設(shè)備間創(chuàng)建安全隧道,使這兩臺(tái)設(shè)備間可以安全地發(fā)送命令、傳輸數(shù)據(jù)等。例如,客戶端通過SSH遠(yuǎn)程登錄到一臺(tái)服務(wù)器上,就可以安全地遠(yuǎn)程管理這臺(tái)服務(wù)器,在服務(wù)器上執(zhí)行想要的命令。
SSL則是使用SSL證書保證兩臺(tái)設(shè)備間安全地傳輸數(shù)據(jù),而不是像SSH那樣可以執(zhí)行命令。例如,用戶通過瀏覽器訪問某安裝了SSL證書且啟用了HTTPS的服務(wù)器,瀏覽器和服務(wù)器之間可以安全地傳輸數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-839563.html
SSH就像一輛汽車,我們看不到這輛封閉的汽車?yán)镅b載的是什么。而SSL就像一個(gè)封閉的集裝箱,我們可以用不同的交通工具運(yùn)輸它,但看不到集裝箱里裝的是什么。文章來源地址http://www.zghlxwxcb.cn/news/detail-839563.html
到了這里,關(guān)于SSH安全協(xié)議介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!