企業(yè)網(wǎng)站架構(gòu)體驗(yàn)營(yíng)銷(xiāo)是什么
目錄
1、定義
2、安全機(jī)制實(shí)現(xiàn)
2.1、對(duì)稱(chēng)加密
2.2、非對(duì)稱(chēng)加密
3、SSH兩種登錄方式
3.1、公鑰交換
3.2、密碼登錄
3.3、公鑰登錄
3.4、兩種登錄方式的優(yōu)缺點(diǎn)
1、定義
Secure?Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在應(yīng)用層基礎(chǔ)上的安全網(wǎng)絡(luò)協(xié)議。它是專(zhuān)為遠(yuǎn)程登錄會(huì)話(甚至可以用Windows遠(yuǎn)程登錄Linux服務(wù)器進(jìn)行文件互傳)和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議,可有效彌補(bǔ)網(wǎng)絡(luò)中的漏洞。相比傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序,如FTP、Pop和Telnet其本質(zhì)上都是不安全的;因?yàn)樗鼈冊(cè)诰W(wǎng)絡(luò)上用明文傳送數(shù)據(jù)、用戶(hù)帳號(hào)和用戶(hù)口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另一個(gè)人或者一臺(tái)機(jī)器冒充真正的服務(wù)器接收用戶(hù)傳給服務(wù)器的數(shù)據(jù),然后再冒充用戶(hù)把數(shù)據(jù)傳給真正的服務(wù)器。通過(guò)SSH,可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,也能夠防止DNS欺騙和IP欺騙。還有一個(gè)額外的好處就是傳輸?shù)臄?shù)據(jù)是經(jīng)過(guò)壓縮的,所以可以加快傳輸?shù)乃俣?/strong>。目前已經(jīng)成為L(zhǎng)inux系統(tǒng)的標(biāo)準(zhǔn)配置。
2、安全機(jī)制實(shí)現(xiàn)
互聯(lián)網(wǎng)上的數(shù)據(jù)傳輸,若未經(jīng)加密,請(qǐng)求可能會(huì)被其他惡意攔截輕松獲取賬號(hào)密碼等信息,可通過(guò)數(shù)據(jù)加密的方式進(jìn)行避免。加密的方式主要有兩種:對(duì)稱(chēng)加密、非對(duì)稱(chēng)加密
2.1、對(duì)稱(chēng)加密
對(duì)稱(chēng)加密(秘鑰加密):客戶(hù)端和服務(wù)端使用同一套秘鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密,如下圖1所示。對(duì)稱(chēng)加密的加密強(qiáng)度高,破解難度大。但是在多個(gè)客戶(hù)端和服務(wù)端安全的保存秘鑰是一個(gè)比較困難的操作,一個(gè)秘鑰被泄露,則整個(gè)系統(tǒng)會(huì)失去安全性。
? ? ? ? ? ? ? ? ? ?
2.2、非對(duì)稱(chēng)加密
非對(duì)稱(chēng)加密(公鑰加密),為解決一個(gè)秘鑰的問(wèn)題,非對(duì)稱(chēng)加密應(yīng)運(yùn)而生。非對(duì)稱(chēng)加密有一個(gè)公鑰和一個(gè)私鑰,公鑰加密后的數(shù)據(jù)只能通過(guò)對(duì)應(yīng)的私鑰解密(反之亦然),而通過(guò)公鑰推出私鑰的可能性微乎其微。
SSH之所以能夠保證安全,原因在于它采用了非對(duì)稱(chēng)加密技術(shù)(RSA)加密了所有傳輸?shù)臄?shù)據(jù),簡(jiǎn)單來(lái)說(shuō)就是客戶(hù)端和服務(wù)端各自生成一套私鑰和公鑰,并且互相交換公鑰,這樣每一條發(fā)出的數(shù)據(jù)都可以用對(duì)方的公鑰來(lái)加密,對(duì)方收到后再用自己的私鑰來(lái)解密。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖1、SSH 密文發(fā)送
3、SSH兩種登錄方式
3.1、公鑰交換
由上圖1所示,兩臺(tái)機(jī)器除了各自的一套公、私鑰之外,還保存了對(duì)方的公鑰,因此必然存在一個(gè)交換各自公鑰的步驟。實(shí)際上并不是簡(jiǎn)單的各自發(fā)送公鑰,而是存在一些專(zhuān)門(mén)的算法。這一步在首次鏈接時(shí)、數(shù)據(jù)傳送之前發(fā)生。
- 客戶(hù)端發(fā)起鏈接請(qǐng)求
- 服務(wù)端返回自己的公鑰,以及一個(gè)會(huì)話ID(這一步客戶(hù)端得到服務(wù)端公鑰)
- 客戶(hù)端生成密鑰對(duì)
- 客戶(hù)端用自己的公鑰異或會(huì)話ID,計(jì)算出一個(gè)值,并用服務(wù)端的公鑰加密
- 客戶(hù)端發(fā)送加密后的值到服務(wù)端,服務(wù)端用私鑰解密
- 服務(wù)端用解密后的值異或會(huì)話ID,計(jì)算出客戶(hù)端的公鑰(這一步服務(wù)端得到客戶(hù)端公鑰)
- 至此,雙方各自持有三個(gè)秘鑰,分別為自己的一對(duì)公、私鑰,以及對(duì)方的公鑰,之后的所有通訊都會(huì)被加密
這里有一個(gè)有趣的地方,兩臺(tái)機(jī)器第一次使用SSH鏈接時(shí),當(dāng)服務(wù)端返回自己的公鑰(第2步)的時(shí)候,客戶(hù)端會(huì)有一條信息提示,大意是無(wú)法驗(yàn)證對(duì)方是否可信,并給出對(duì)方公鑰指紋(MD5值),問(wèn)是否確定要建立鏈接。這是因?yàn)楣€長(zhǎng)度較長(zhǎng)難以比對(duì),提示信息中將其經(jīng)過(guò)MD5計(jì)算轉(zhuǎn)換為128位的指紋便于比較。而為確保用戶(hù)能比對(duì)公鑰指紋,Server需在自己的網(wǎng)站上貼出自己的公鑰指紋用于用戶(hù)核對(duì)。
這是因?yàn)镾SH雖然傳輸過(guò)程中很安全,但是在首次建立鏈接時(shí)并沒(méi)有辦法知道發(fā)來(lái)的公鑰是否真的來(lái)自自己請(qǐng)求的服務(wù)器,如果有人在客戶(hù)端請(qǐng)求服務(wù)器后攔截了請(qǐng)求,并返回自己的公鑰冒充服務(wù)器,這時(shí)候如果鏈接建立,那么所有的數(shù)據(jù)就都能被攻擊者用自己的私鑰解密了。這也就是所謂的中間人攻擊。
3.2、密碼登錄
- 服務(wù)端收到登錄請(qǐng)求后,首先互換公鑰,詳細(xì)步驟如上一節(jié)所述。
- 客戶(hù)端用服務(wù)端的公鑰加密賬號(hào)密碼并發(fā)送
- 服務(wù)端用自己的秘鑰解密后得到賬號(hào)密碼,然后進(jìn)行驗(yàn)證
- 服務(wù)端用客戶(hù)端的公鑰加密驗(yàn)證結(jié)果并返回
- 客戶(hù)端用自己的秘鑰解密后得到驗(yàn)證結(jié)果
3.3、公鑰登錄
有些時(shí)候并不是開(kāi)發(fā)者手動(dòng)去連接服務(wù)器,而是客戶(hù)端的程序需要連接到服務(wù)器,這時(shí)候用密碼登錄就比較不方便,一是需要處理輸入密碼的問(wèn)題,二是需要想辦法安全的儲(chǔ)存密碼到程序里,這種情況下便可以利用公鑰來(lái)進(jìn)行無(wú)密碼登錄。
- 客戶(hù)端用戶(hù)必須手動(dòng)地將自己的公鑰添加到服務(wù)器一個(gè)名叫 authorized_keys 的文件里,顧名思義,這個(gè)文件保存了所有可以遠(yuǎn)程登錄的機(jī)器的公鑰。
- 客戶(hù)端發(fā)起登錄請(qǐng)求,并且發(fā)送一個(gè)自己公鑰的指紋(具有唯一性,但不是公鑰)
- 服務(wù)端根據(jù)指紋檢測(cè)此公鑰是否保存在authorized_keys中
- 若存在,服務(wù)端便生成一段隨機(jī)字符串 + 自己的公鑰,然后利用客戶(hù)端公鑰加密并返回(質(zhì)詢(xún)客戶(hù)端)
- 客戶(hù)端收到后用自己的私鑰解密得到字符串以及服務(wù)器公鑰,再利用服務(wù)端公鑰加密后發(fā)回
- 服務(wù)端收到后用自己的私鑰解密,如果為同一字符串,則驗(yàn)證通過(guò)
利用公鑰登錄的關(guān)鍵是必須手動(dòng)將客戶(hù)端的公鑰添加到服務(wù)端,比如GitHub便有這一步驟,添加了之后便可無(wú)密碼登錄。
3.4、兩種登錄方式的優(yōu)缺點(diǎn)
密碼登錄
優(yōu)點(diǎn):登錄時(shí)間較短。
缺點(diǎn):1、首次登錄需要公鑰交換,容易受到"中間人"攻擊;2、每次登錄均需要輸入密碼。
公鑰登錄
優(yōu)點(diǎn):無(wú)需公鑰交換,不易受到"中間人"攻擊。
缺點(diǎn):1、登錄過(guò)程還有質(zhì)詢(xún)操作,時(shí)間較長(zhǎng)(10s);2、需要事先手動(dòng)將客戶(hù)端公鑰拷到服務(wù)器上。