SSH協議詳解

來源:互聯網
上載者:User

標籤:des   style   blog   http   os   使用   io   strong   ar   

轉寄的http://blog.csdn.net/macrossdzh/article/details/5691924

很透徹啊,學習了

一、什麼是SSH

 

SSH是英文Secure Shell的簡寫形式。通過使用SSH,你可以把所有傳輸的資料進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的資料是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、Pop、甚至為PPP提供一個安全的"通道"。

 

二、SSH 基本架構

 

SSH協議架構中最主要的部分是三個協議:

 

* 傳輸層協議(The Transport Layer Protocol)提供伺服器認證,資料機密性,資訊完整性 等的支援;

* 使用者認證協議(The User Authentication Protocol) 則為伺服器提供用戶端的身份鑒別;

* 連線協定(The Connection Protocol) 將加密的資訊隧道複用成若干個邏輯通道,提供給更高層的應用協議使用; 各種高層應用協議可以相對地獨立於SSH基本體系之外,並依靠這個基本架構,通過連線協定使用SSH的安全機制。

 

同時SSH協議架構中還為許多高層的網路安全應用協議提供擴充的支援。它們之間的層次關係可以用如來表示:

三、主機密鑰機制

 

對於SSH這樣以提供安全通訊為目標的協議,其中必不可少的就是一套完備的密鑰機制。由於SSH協議是面向互連網網路中主機之間的互訪與資訊交換,所以主機密鑰成為基本的密鑰機制。也就是說,SSH協議要求每一個使用本協議的主機都必須至少有一個自己的主機金鑰組,服務方通過對客戶方主機密鑰的認證之後,才能允許其串連請求。一個主機可以使用多個密鑰,針對不同的密鑰演算法而擁有不同的密鑰,但是至少有一種是必備的,即通過 DSS演算法產生的密鑰。關於DSS演算法,請參考[FIPS-186]。

 

SSH協議關於主機密鑰認證的管理方案有兩種,如所示:

每一個主機都必須有自己的主機密鑰,密鑰可以有多對,每一對主機金鑰組包括公開密鑰和私人密鑰。在實際應用過程中怎樣使用這些密鑰,並依賴它們來實現安全特性呢?如所示,SSH協議架構中提出了兩種方案。

 

在第一種方案中,主機將自己的公用密鑰分發給相關的客戶機,客戶機在訪問主機時則使用該主機的公開密鑰來加密資料,主機則使用自己的私人密鑰來解密資料,從而實現主機密鑰認證,確定客戶機的可靠身份。在圖2(a)中可以看到,使用者從主機A上發起操作,去訪問,主機B和主機C,此時,A成為客戶機,它必須事先配置主機B和主機C的公開密鑰,在訪問的時候根據主機名稱來尋找相應的公開密鑰。對於被訪問主機(也就是伺服器端)來說則只要保證安全地儲存自己的私人密鑰就可以了。

 

在 第二種方案中,存在一個密鑰認證中心,所有系統中提供服務的主機都將自己的公開密鑰提交給認證中心,而任何作為客戶機的主機則只要儲存一份認證中心的公開 密鑰就可以了。在這種模式下,客戶機在訪問伺服器主機之前,還必須向密鑰認證中心請求認證,認證之後才能夠正確地串連到目的主機上。

 

很 顯然,第一種方式比較容易實現,但是客戶機關於密鑰的維護卻是個麻煩事,因為每次變更都必須在客戶機上有所體現;第二種方式比較完美地解決管理維護問題, 然而這樣的模式對認證中心的要求很高,在互連網絡上要實現這樣的集中認證,單單是權威機構的確定就是個大麻煩,有誰能夠什麼都能說了算呢?但是從長遠的發 展來看,在公司專屬應用程式和商業應用領域,採用中心認證的方案是必要的。

 

另外,SSH協議架構中還允許對主機密鑰的一個折中處理,那就是首次訪問免認證。首次訪問免認證是指,在某客戶機第一次訪問主機時,主機不檢查主機密鑰,而向該客戶都發放一個公開密鑰的拷貝,這樣在以後的訪問中則必須使用該密鑰,否則會被認為非法而拒絕其訪問。

 

 

 

四、SSH 的工作過程

 

在整個通訊過程中,為實現 SSH的安全連線,伺服器端與用戶端要經曆如下五個階段:

    * 版本號碼協商階段,SSH目前包括 SSH1和SSH2兩個版本, 雙方通過版本協商確定使用的版本

    * 密鑰和演算法協商階段,SSH支援多種密碼編譯演算法, 雙方根據本端和對端支援的演算法,協商出最終使用的演算法

    * 認證階段,SSH用戶端向伺服器端發起認證請求, 伺服器端對用戶端進行認證

    * 會話要求階段, 認證通過後,用戶端向伺服器端發送會話請求

    * 互動會話階段 ,會話請求通過後,伺服器端和用戶端進行資訊的互動

 

 

1 . 版本號碼協商階段

   1. 伺服器開啟連接埠 22,等待用戶端串連。

   2. 用戶端向伺服器端發起 TCP初始串連請求,TCP串連建立後,伺服器向用戶端發送第一個報文,包括版本標誌字串,格式為“SSH-<主協議版本號碼>.<次協議版本號碼>-<軟體版本號碼>”,協議版本號碼由主要版本號和次版本號碼組成,軟體版本號碼主要是為調試使用。

   3. 用戶端收到報文後,解析該資料包,如果伺服器端的協議版本號碼比自己的低,且用戶端能支援伺服器端的低版本,就使用伺服器端的低版本協議號,否則使用自己的協議版本號碼。

   4. 用戶端回應伺服器一個報文,包含了用戶端決定使用的協議版本號碼。伺服器比較用戶端發來的版本號碼,決定是否能同用戶端一起工作。

   5. 如果協商成功,則進入密鑰和演算法協商階段,否則伺服器端斷開 TCP串連。

Note: 版本號碼協商階段報文都是採用明文方式傳輸的。

 

2. 密鑰和演算法協商階段

   1. 伺服器端和用戶端分別發送演算法協商報文給對端,報文中包含自己支援的公開金鑰演算法列表、密碼編譯演算法列表、MAC(Message Authentication Code,訊息驗證碼)演算法列表、壓縮演算法列表等;

   2. 伺服器端和用戶端根據對端和本端支援的演算法列表得出最終使用的演算法。

   3. 伺服器端和用戶端利用 DH交換(Diffie-Hellman Exchange)演算法、主機金鑰組等參數,產生工作階段金鑰和會話 ID。

 

      通過以上步驟,伺服器端和用戶端就取得了相同的工作階段金鑰和會話ID。

          * 對於後續傳輸的資料,兩端都會使用工作階段金鑰進行加密和解密,保證了資料傳送的安全

          * 在認證階段,兩端會使用會話 ID用於認證過程。

      Note:

             在協商階段之前,伺服器端已經產生 RSA或 DSA金鑰組,他們主要用於參與工作階段金鑰的產生。

 

 

3. 認證階段

   1. 用戶端向伺服器端發送認證請求,認證請求中包含使用者名稱、認證方法、與該認證方法相關的內容(如:password認證時,內容為密碼)。

   2. 伺服器端對用戶端進行認證,如果認證失敗,則向用戶端發送認證失敗訊息,其中包含可以再次認證的方法列表。

   3. 用戶端從認證方法列表中選取一種認證方法再次進行認證。

   4. 該過程反覆進行, 直到認證成功或者認證次數達到上限, 伺服器關閉串連為止。

 

SSH提供兩種認證方式:

   1. password認證:用戶端向伺服器發出 password認證請求,將使用者名稱和密碼加密後發送給伺服器;伺服器將該資訊解密後得到使用者名稱和密碼的明文,與裝置上儲存的使用者名稱和密碼進行比較,並返回認證成功或失敗的訊息。

   2. publickey 認證:採用數位簽章的方法來認證用戶端。目前,裝置上可以利用RSA和 DSA兩種公用密鑰演算法實現數位簽章。用戶端發送包含使用者名稱、公用密鑰和公用密鑰演算法的 publickey 認證請求給伺服器端。伺服器對公開金鑰進行合法性檢查,如果不合法,則直接發送失敗訊息;否則,伺服器利用數位簽章對用戶端進行認證,並返回認證成功或失敗的訊息

 

SSH2.0還提供了 password-publickey 認證和 any 認證:

   1. password-publickey 認證:指定該使用者的認證方式為 password 和 publickey認證同時滿足。用戶端版本為 SSH1的使用者只要通過其中一種認證即可登入;用戶端版本為 SSH2的使用者必須兩種認證都通過才能登入。

   2. any認證:指定該使用者的認證方式可以是 password,也可以是 publickey。

 

4.會話要求階段

   1. 伺服器等待用戶端的請求;

   2. 認證通過後,用戶端向伺服器發送會話請求;

   3. 伺服器處理用戶端的請求。請求被成功處理後, 伺服器會向用戶端回應 SSH_SMSG_SUCCESS包,SSH進入互動會話階段;否則回應 SSH_SMSG_FAILURE包,表示伺服器處理請求失敗或者不能識別請求。

 

5.互動會話階段

在這個模式下,資料被雙向傳送:

   1. 用戶端將要執行的命令加密後傳給伺服器;

   2. 伺服器接收到報文,解密後執行該命令,將執行的結果加密發還給用戶端;

   3. 用戶端將接收到的結果解密後顯示到終端上.

 

 

 

 

 

五、SSH的應用

  

    首先,SSH最常見的應用就是,用它來取代傳統的Telnet、FTP等網路應用程式,通過SSH登入到遠方機器執行你想進行的工作與命令。在不安全的網路通訊環境中,它提供了很強的驗證(authentication)機制與非常安全的通訊環境。實際上,SSH開發人員的原意是設計它來取代原UNIX系統上的rcp、rlogin、rsh等指令程式的;但經過適當封裝後,發現它在功能上完全可以取代傳統的Telnet、FTP等應用程式。

    傳統 BSD 風格的 r 系列指令(如 rcp,rsh,rlogin)往往都被視為不安全的,很容易就被各種網路攻擊手段所破解,幾乎所有找得到有關UNIX安全的書或檔案,都會一而再、再而三地警告系統管理者,留心r系列指令的設定,甚至要求系統管理者將r系列指令通通關閉。

    而用來替代r系列指令的SSH,則在安全方面做了極大的強化,不但對通訊內容可以進行極為安全的加密保護,同時也強化了對身分識別驗證的安全機制,它應用了在密碼學(Cryptography)中已發展出來的數種安全加密機制,如 Symmetric Key Cryptography,Asymmetric Key Cryptography, One-way Hash Function,Random-number Generation等,來加強對於身分識別驗證與通訊內容的安全保護。通訊時資料的加密有IDEA,three-key triple DES,DES,RC4-128,TSS,Blowfish 等數種多種安全密碼編譯演算法可供選擇,加密的key則是通過 RSA 進行交換的。資料的加密可以對抗IP spoofing,RSA這種非對稱性的加密機制則可用來對抗DNS spoofing與IP routing spoofing,同時RSA也可以進行對主機身份的驗證。

    其次,通過使用用SSH可以在本地主機和遠程伺服器之間設定"加密通道",並且這樣設定的"加密通道"可以跟常見的Pop應用程式、X應用程式、Linuxconf應用程式相結合,提供安全保障。

    SSH的"加密通道"是通過"連接埠轉寄"來實現的。你可以在本地連接埠(沒有用到的)和在遠程伺服器上啟動並執行某個服務的連接埠之間建立"加密通道"。然後只要串連到本地連接埠。所有對本地連接埠的請求都被SSH加密並且轉寄到遠程伺服器的連接埠。當然只有遠程伺服器上運行SSH伺服器軟體的時候"加密通道"才能工作。

 

 

 

六、SSH Q&A

 

    Q1: SSH的版本和區別。

    SSH2避免了RSA的專利問題,並修補了CRC的缺陷。SSH2用數位簽章演算法(DSA)和Diffie-Hellman(DH)演算法代替RSA來完成對稱金鑰的交換,用HMAC來代替CRC。同時SSH2增加了AES和Twofish等對稱式加密演算法。

    A1: SSH(Secure SHell)到目前為止有兩個不相容的版本——SSH1和SSH2。SSH1又分為1.3和1.5兩個版本。SSH1採用DES、3DES、 Blowfish和RC4等對稱式加密演算法保護資料安全傳輸,而對稱式加密演算法的密鑰是通過非對稱式加密演算法(RSA)來完成交換的。SSH1使用迴圈冗餘校正碼(CRC)來保證資料的完整性,但是後來發現這種方法有缺陷。

    更多內容請參考The SSHv1 Protocol & The SSHv2 Protocol

   

     Q2: 什麼是HMAC?

    A2: HMAC(Hash Message Authentication Code) ,散列訊息鑒別碼,基於密鑰的Hash演算法的認證協議。訊息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別訊息的完整性。使用一個密鑰產生一個固定大小的小資料區塊,即MAC,並將其加入到訊息中,然後傳輸。接收方利用與發送方共用的密鑰進行鑒別認證等。

 

    Q3: 什麼是X11 forwarding?

    A3: sh的X11 forwarding特性可以使X client和X server安全地通訊。使用X11 forwarding後,從X client到X Server方向的資料先被送至ssh server,ssh server利用和ssh client的安全通道轉寄給ssh client,再由ssh client轉寄給X server,從X server到X client的資料流同理。這裡ssh server和ssh client充當了X client和X server間資料的轉寄站,由於ssh server和X client、ssh client和X server一般在同一台機器上,它們之間是一種安全的進程間通訊,而ssh server和ssh client間的通訊也是安全的,所以X client和X server間的通訊就是安全的。

 

    Q4: 什麼是TTY?

    A4: 終端是一種字元型裝置,它有多種類型,通常使用tty來簡稱各種類型的終端裝置。tty是 Teletype的縮寫。Teletype是最早出現的一種終端裝置,很象電傳打字機,是由Teletype公司生產的。裝置名稱放在特殊檔案目錄/dev/下。

 

    Q5: 簡單描述下SSH啟動並執行過程?

    A5:簡要過程如下:

        * Client端向Server端發起SSH串連請求。

        * Server端向Client端發起版本協商。

        * 協商結束後Server端發送Host Key公開金鑰 Server Key公開金鑰,隨機數等資訊。到這裡所有通訊是不加密的。

        * Client端返回確認資訊,同時附帶用公開金鑰加密過的一個隨機數,用於雙方計算Session Key。

        * 進入認證階段。從此以後所有通訊均加密。

        * 認證成功後,進入互動階段。

SSH協議詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.