SFTP 和 FTPS 協議

前言

就在一週前,我正在寫一篇關於標題中所示主題的文章,並面臨這樣一個事實:網路上沒有那麼多教育資訊。 主要是枯燥的事實和設定說明。 因此,我決定稍微修改一下文字,並將其作為一篇文章發布。

什麼是FTP

FTP(檔案傳輸協定)是一種透過網路傳輸檔案的協定。 它是基本乙太網路協定之一。 1971 年出現,最初在 DARPA 網路工作。 目前,與HTTP一樣,檔案傳輸是基於由一組TCP/IP(傳輸控制協定/網際網路協定)協定組成的模型。 在 RFC 959 中定義。

該協議定義了以下內容:

  • 錯誤檢查將如何進行?
  • 資料打包方式(如果使用打包)
  • 發送設備如何表明它已完成一條訊息?
  • 接收設備如何表示已收到訊息?

客戶端和伺服器之間的通信

讓我們仔細看看 FTP 操作過程中發生的過程。 連接由用戶的協定解釋器初始化。 交換透過 TELNET 標準中的控制通道進行控制。 FTP指令由使用者的協定解釋器產生並傳送到伺服器。 伺服器的回應也透過控制通道發送給使用者。 一般來說,使用者能夠透過使用者解釋器以外的方式與伺服器的協定解釋器建立聯繫。

FTP的主要特點是它使用雙連接。 其中之一用於向伺服器發送命令,預設會透過 TCP 連接埠 21 發生,該連接埠可以變更。 只要客戶端與伺服器通信,控制連接就存在。 在機器之間傳輸資料時,控制通道必須開啟。 如果關閉,則資料傳輸停止。 透過第二個,發生直接資料傳輸。 每次客戶端和伺服器之間發生檔案傳輸時都會開啟它。 如果同時傳輸多個文件,每個文件都會開啟自己的傳輸通道。

FTP 可以在主動或被動模式下運行,這兩種模式的選擇決定了連線的建立方式。 在主動模式下,客戶端與伺服器建立TCP控制連接,並將其IP位址和任意客戶端連接埠號碼傳送到伺服器,然後等待伺服器使用該位址和連接埠號碼啟動TCP連接。 如果客戶端位於防火牆後面且無法接受傳入的 TCP 連接,則可以使用被動模式。 在此模式下,用戶端使用控制流向伺服器傳送 PASV 命令,然後從伺服器接收其 IP 位址和連接埠號,然後用戶端使用這些資訊從其任意連接埠開啟資料流。

資料可能會傳送到第三台機器。 在這種情況下,使用者組織與兩個伺服器的控制通道並組織它們之間的直接資料通道。 控制命令透過用戶,資料直接在伺服器之間傳遞。

透過網路傳輸資料時,可以使用四種資料表示形式:

  • ASCII – 用於文字。 如果需要,資料在傳輸之前從發送主機上的字元表示形式轉換為“八位元 ASCII”,並且(如果需要,再次)轉換為接收主機上的字元表示形式。 特別是,換行符發生了變化。 因此,此模式不適合僅包含純文字的文件。
  • 二進位模式 - 發送設備逐字節發送每個文件,接收方在收到後儲存位元組流。 建議所有 FTP 實作都支援此模式。
  • EBCDIC – 用於以 EBCDIC 編碼在主機之間傳送純文字。 除此之外,此模式與 ASCII 模式類似。
  • 本機模式 - 允許兩台具有相同設定的電腦以自己的格式發送數據,而無需轉換為 ASCII。

資料傳輸可以透過以下三種模式中的任一種進行:

  • 流模式 - 資料以連續流傳送,使 FTP 免於執行任何處理。 相反,所有處理都是透過 TCP 完成的。 除了將資料分隔成記錄之外,不需要文件結束指示符。
  • 區塊模式 - FTP 將資料分成幾個區塊(標頭區塊、位元組數、資料欄位),然後將它們傳輸到 TCP。
  • 壓縮模式 – 使用單一演算法壓縮資料(通常透過編碼遊程長度)。

FTP伺服器是提供使用檔案傳輸協定能力的伺服器。 它具有與傳統 Web 伺服器不同的某些特徵:

  • 需要使用者身份驗證
  • 所有操作均在目前會話內執行
  • 能夠使用檔案系統執行各種操作
  • 每個連接使用單獨的通道

FTP 用戶端是一個程序,可讓您透過 FTP 連接到遠端伺服器,並使用檔案系統的元素對其執行必要的操作。 客戶端很可能是瀏覽器,您應該在其網址列中輸入位址,該位址是遠端伺服器上特定目錄或檔案的路徑,按照一般的 URL 框圖:

ftp://user:pass@address:port/directory/file

但是,在這種情況下使用網頁瀏覽器將僅允許您查看或下載感興趣的檔案。 為了充分利用FTP的所有優點,您應該使用專門的軟體作為客戶端。

FTP 驗證使用使用者名稱/密碼方案來授予存取權限。 使用者名稱透過 USER 命令傳送到伺服器,密碼透過 PASS 命令傳送到伺服器。 如果伺服器接受客戶端提供的訊息,則伺服器將向客戶端發送邀請,會話開始。 如果伺服器支援此功能,使用者可以在不提供憑證的情況下登錄,但伺服器只能為此類會話授予有限的存取權限。

提供FTP服務的主機可以提供匿名FTP存取。 使用者通常使用「匿名」(在某些 FTP 伺服器上可能區分大小寫)作為使用者名稱登入。 儘管通常會要求使用者提供電子郵件地址而不是密碼,但實際上不會執行任何驗證。 許多提供軟體更新的 FTP 主機支援匿名存取。

協議圖

FTP 連線期間的客戶端-伺服器互動可以視覺化如下:

SFTP 和 FTPS 協議

安全FTP

FTP 最初並不是為了保證安全,因為它用於多個軍事設施和機構之間的通訊。 但隨著網路的發展和普及,未經授權存取的危險增加了許多倍。 需要保護伺服器免受各種類型的攻擊。 1999 年 2577 月,RFC XNUMX 的作者將這些漏洞總結為以下問題清單:

  • 隱藏攻擊(反彈攻擊)
  • 欺騙攻擊
  • 暴力攻擊
  • 資料包擷取、嗅探
  • 連接埠竊取

常規FTP不具備以加密形式傳輸資料的能力,因此使用者名稱、密碼、指令等資訊很容易被攻擊者截獲。 此問題的通常解決方案是使用易受攻擊的協定 (FTPS) 的「安全性」、受 TLS 保護的版本或其他更安全的協議,例如大多數 Secure Shell 協定實作中提供的 SFTP/SCP。

FTPS

FTPS (FTP + SSL) 是標準檔案傳輸協定的擴展,它在其基本功能中添加了使用 SSL(安全通訊端層)協定建立加密會話的功能。 如今,保護由更先進的模擬 TLS(傳輸層安全)提供。

SSL

SSL 協定由 Netscape Communications 於 1996 年提出,旨在確保 Internet 連線的安全性和隱私性。 該協定支援客戶端和伺服器身份驗證,獨立於應用程序,並且對 HTTP、FTP 和 Telnet 協定是透明的。

SSL 握手協定由兩個階段組成:伺服器驗證和可選的客戶端身份驗證。 在第一階段,伺服器透過發送其憑證和加密參數來回應客戶端的請求。 然後客戶端產生主密鑰,使用伺服器的公鑰對其進行加密,然後將其發送到伺服器。 伺服器用其私鑰解密主金鑰,並透過傳回由客戶端主金鑰驗證的訊息來向客戶端驗證自己的身分。

後續資料將使用從此主金鑰派生的金鑰進行加密和驗證。 第二步是可選的,伺服器向客戶端發送請求,客戶端透過使用自己的數位簽章和公鑰憑證回傳請求來向伺服器驗證自己的身分。

SSL 支援多種加密演算法。 在建立通訊過程中,使用RSA公鑰密碼系統。 金鑰交換後,使用許多不同的密碼:RC2、RC4、IDEA、DES 和 TripleDES。 也使用 MD5——一種用於建立訊息摘要的演算法。 X.509 中描述了公鑰憑證的語法。

SSL 的重要優勢之一是其完全獨立於軟體平台。 該協議是根據可移植性原則開發的,其構造的想法並不取決於使用它的應用程式。 此外,其他協定可以透明地疊加在 SSL 協定之上也很重要; 要麼進一步提高目標資訊流的保護程度,要麼使 SSL 的加密功能適應某些其他明確定義的任務。

SSL 連線

SFTP 和 FTPS 協議

SSL 提供的安全通道有三個主要屬性:

  • 該頻道是私人的。 經過簡單的對話後,所有訊息都會被加密,以確定金鑰。
  • 該通道已通過身份驗證。 會話的伺服器端始終經過身份驗證,而用戶端則可選擇進行身份驗證。
  • 通路可靠。 訊息傳輸包括完整性檢查(使用 MAC)。

FTPS的特點

FTPS 有兩種實作方式,使用不同的方法提供安全性:

  • 隱式方法涉及在發送資料之前使用標準 SSL 協定建立會話,這反過來又破壞了與常規 FTP 用戶端和伺服器的兼容性。 為了向後相容不支援FTPS的客戶端,TCP埠990用於控制連接,989用於資料傳輸,保留了FTP協定的標準埠21。 此方法被認為已過時。
  • 顯式更方便,因為它使用標準 FTP 命令,但在回應時對資料進行加密,這允許您對 FTP 和 FTPS 使用相同的控制連接。 客戶端必須明確請求伺服器進行安全資料傳輸,然後批准加密方法。 如果用戶端不要求安全傳輸,FTPS 伺服器有權維持或關閉不安全的連線。 RFC 2228 新增了身份驗證和資料安全協商機制,其中包括新的 FTP AUTH 命令。 儘管該標準沒有明確定義安全機制,但它確實指定客戶端必須使用上述演算法啟動安全連線。 如果伺服器不支援安全連接,則應返回錯誤碼504。FTPS客戶端可以使用FEAT命令獲取伺服器支援的安全協定訊息,但伺服器不需要透露其所支援的安全等級。支援。 最常見的 FTPS 指令是 AUTH TLS 和 AUTH SSL,它們分別提供 TLS 和 SSL 安全性。

SFTP

SFTP(安全文件傳輸協定)是一種運行在安全通道之上的應用層檔案傳輸協定。 不要與(簡單文件傳輸協定)混淆,它具有相同的縮寫。 如果說 FTPS 只是 FTP 的擴展,那麼 SFTP 就是一個獨立且不相關的協議,它使用 SSH(Secure Shell)作為其基礎。

安全Shell

該協議由 IETF 的一個名為 Secsh 的小組開發。 新SFTP協定的工作文件並未成為正式標準,但開始積極用於應用程式開發。 隨後,該協議發布了六個版本。 然而,其中功能的逐漸增加導致了14年2006月XNUMX日,由於該專案的主要任務(SSH開發)完成並且缺乏具有足夠的專家水平,可以繼續開發成熟的遠端文件系統協議。

SSH 是一種網路協議,允許遠端控製作業系統和 TCP 連接隧道(例如,用於檔案傳輸)。 其功能與 Telnet 和 rlogin 協定類似,但與它們不同的是,它會加密所有流量,包括傳輸的密碼。 SSH 允許選擇不同的加密演算法。 SSH 用戶端和 SSH 伺服器可用於大多數網路作業系統。

SSH 允許您在不安全的環境中安全地傳輸幾乎任何其他網路協定。 因此,您不僅可以透過命令 shell 在電腦上遠端工作,還可以透過加密通道傳輸音訊串流或視訊(例如,來自網路攝影機)。 SSH還可以使用傳輸資料的壓縮來進行後續加密,這對於例如遠端啟動X WindowSystem客戶端來說很方便。

該協議的第一個版本 SSH-1 由赫爾辛基理工大學(芬蘭)的研究人員 Tatu Ulönen 於 1995 年開發。 SSH-1 的編寫目的是提供比 rlogin、telnet 和 rsh 協定更好的隱私性。 1996 年,開發了更安全的協定版本 SSH-2,它與 SSH-1 不相容。 該協議變得更加流行,到 2000 年它已經擁有大約 2 萬用戶。 目前,術語“SSH”通常指的是 SSH-2006,因為由於存在重大缺陷,該協議的第一個版本現在實際上尚未使用。 XNUMX年,該協定被IETF工作小組批准為網際網路標準。

SSH 有兩種常見的實作:私有商業和免費開源。 免費的實作稱為 OpenSSH。 到 2006 年,網路上 80% 的電腦使用 OpenSSH。 此專有實施由 Tectia Corporation 的全資子公司 SSH Communications Security 開發,並且免費供非商業用途使用。 這些實作包含幾乎相同的命令集。

與 telnet 協定不同,SSH-2 協定可以抵抗流量竊聽攻擊(「嗅探」),但不能抵抗中間人攻擊。 SSH-2 協定還可以抵抗會話劫持攻擊,因為不可能加入或劫持已建立的會話。

為了防止連接到客戶端尚不知道金鑰的主機時發生中間人攻擊,用戶端軟體會向使用者顯示「金鑰指紋」。 建議仔細檢查客戶端軟體顯示的「金鑰快照」與伺服器金鑰快照,最好透過可靠的溝通管道或親自取得。

所有類 UNIX 系統都提供 SSH 支持,並且大多數系統都具有 ssh 用戶端和伺服器作為標準實用程式。 非 UNIX 作業系統有多種 SSH 用戶端實作。 在流量分析器和中斷本地網路運作的方法廣泛發展後,該協定獲得了廣泛的歡迎,作為管理重要節點的不安全 Telnet 協定的替代解決方案。

使用 SSH 進行通信

要透過 SSH 工作,您需要 SSH 伺服器和 SSH 用戶端。 伺服器偵聽來自客戶端電腦的連接,並在建立連接後執行身份驗證,然後開始為客戶端提供服務。 客戶端用於登入遠端電腦並執行命令。

SFTP 和 FTPS 協議

與FTPS的比較

SFTP 與標準 FTP 和 FTPS 的主要區別在於,SFTP 絕對加密所有命令、使用者名稱、密碼和其他機密資訊。

FTPS 和 SFTP 協定都使用非對稱演算法(RSA、DSA)、對稱演算法(DES/3DES、AES、Twhofish 等)以及金鑰交換演算法的組合。 對於身份驗證,FTPS(或更準確地說,FTP 上的 SSL/TLS)使用 X.509 證書,而 SFTP(SSH 協定)則使用 SSH 金鑰。

X.509 憑證包括公鑰和有關所有者憑證的一些資訊。 另一方面,該資訊允許驗證證書本身的完整性、真實性和證書的所有者。 X.509 憑證有一個相應的私鑰,出於安全原因,私鑰通常與憑證分開儲存。

SSH金鑰僅包含公鑰(對應的私鑰單獨儲存)。 它不包含有關密鑰所有者的任何資訊。 一些 SSH 實作使用 X.509 憑證進行身份驗證,但它們實際上並未驗證整個憑證鏈 - 僅使用公鑰(這使得此類身份驗證不完整)。

結論

儘管 FTP 協定歷史悠久,但無疑在網路資訊儲存和分發方面仍然發揮著重要作用。 它是一種方便、多功能、標準化的協定。 許多檔案檔案都是建立在它的基礎上的,沒有它,技術工作就不會如此有效。 此外,它很容易設置,幾乎所有當前和非當前平台都存在伺服器和客戶端程式。

反過來,其受保護版本解決了現代世界中儲存和傳輸資料的機密性問題。 兩種新協議都有其優點和缺點,作用也略有不同。 在需要檔案存檔的區域,最好使用 FTPS,特別是如果之前已經使用過經典 FTP。 SFTP 由於與舊協定不相容而不太常見,但它更安全且具有更多功能,因為它是遠端管理系統的一部分。

來源清單

來源: www.habr.com

添加評論