FTPS (FTP over SSL) vs. SFTP (SSH 文件傳輸協議): 我們如何做出選擇


     第一個RFC的FTP協議發布通過網絡使用FTP協議(由RFC 959或更高版本)的文件傳輸始於1980年,FTP提供上傳,下載和刪除文件,創建和刪除目錄,讀取目錄內容的功能。雖然FTP是非常受歡迎的,它有一些缺點,使其更難使用。主要的缺點是缺乏目錄列表的統一格式(這個問題已經通過引入MLST命令部分解決,但是一些服務器不支持)和輔助連接(DATA連接)的存在。FTP中的安全性通過對RFC 2228中定義的信道加密采用SSL / TLS協議來提供。FTP的安全版本稱為FTPS。

     在UNIX系統中,另一種安全標准有所提升。它是SSH協議家族的一員,SSH的主要功能是保護遠程shell訪問UNIX系統。后來SSH擴展了文件傳輸協議 - 第一個是SCP(SSH 1.x),然后是SFTP(SSH2)。版本1中的SSH協議已經過時了,而且不安全,我們一般不推薦使用。 因此,SCP不再被使用,然后SFTP卻日益流行。

     “SFTP”縮寫經常被誤解是FTP某種安全的類型,人們通常認為是FTPS。另一個(類似的)誤解是SFTP被認為是某種基於SSL的FTP。 而實際上SFTP是“SSH文件傳輸協議”的縮寫。這不是基於SSL的FTP,而是基於SSH的FTP(這在技術上也是可能的,但是非常少見)。

     SFTP是一種二進制協議,其最新版本在RFC 4253中被標准化。所有命令(請求)被打包為二進制消息,並發送到服務器,服務器使用二進制回復包進行回復。在之后的版本中,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證書進行身份驗證,但實際上它們不驗證整個證書鏈 - 只使用公鑰(這使得此類身份驗證不完整,類似於SSH密鑰身份驗證)。

     以下是兩個協議的優缺點的簡要列表:

     FTPS

     優點:

  • 廣為人知並使用
  • 通信可以由人閱讀和理解
  • 提供了服務器到服務器文件傳輸的服務
  • SSL / TLS具有良好的身份驗證機制(X.509證書功能)
  • 在許多互聯網通信框架中都支持內置FTP與SSL / TLS。

     缺點:

  • 沒有統一的目錄列表格式
  • 需要輔助數據通道,這使其難以在防火牆后使用
  • 沒有為文件名定義標准字符集(編碼)
  • 並非所有FTP服務器都支持SSL / TLS
  • 沒有標准的方式來獲取和更改文件和目錄屬性

     SFTP

     優點:

  • 有良好的標准背景,在操作方面具有嚴格的定義
  • 只有一個連接(不需要DATA連接)
  • 連接始終保持安全
  • 統一的目錄列表格式
  • 協議包括用於權限和屬性操作,文件鎖定和更多功能的操作

     缺點:

  • 通信是二進制的,可讀性差
  • SSH密鑰更難以管理和驗證
  • 標准將某些事物定義為可選或推薦的,這導致某些兼容性問題
  • 沒有服務器到服務器副本以及遞歸目錄刪除操作
  • 在VCL和.NET框架中不支持內置的SSH / SFTP

 

    如何做出選擇

    通常,答案取決於您的目標和要求。 一般來說,SFTP在技術上優於FTPS。 當然,實現對兩個協議的支持是一個好主意,但是它們在概念,支持的命令和許多其他方面是不同的。

    當您具有需要從個人設備(智能手機,PDA等)訪問的服務器或具有FTP支持但沒有SSH / SFTP客戶端的某些特定操作系統時,最好使用FTPS。 如果您正在構建自定義安全解決方案,SFTP可能是更好的選擇。

    對於客戶端,需求由您計划連接的服務器定義。 當連接到Internet服務器時,SFTP更受歡迎,因為它默認由Linux和UNIX服務器支持。

    對於私有主機到主機傳輸,您可以使用SFTP和FTPS。 對於FTPS,您需要搜索一個免費的FTPS客戶端和服務器軟件或購買商業許可證。 對於SFTP支持,您可以安裝OpenSSH軟件包,它提供免費的客戶端和服務器軟件。 對於商業用途,我們建議使用Bitvise SSH服務器。

 

    開發工具

     如果您是軟件開發人員,並且需要在應用程序中實現文件傳輸功能,則您將搜索組件以執行該作業。

     .NET中,對.NET Framework中的FTPS有內置支持(請參閱FtpWebRequest類)。 但是這個類的功能受到嚴格限制,特別是在SSL / TLS控制方面。
.NET Framework不包括對SSH或SFTP的任何支持。

     VCL中,您可以選擇提供FTP功能的免費組件和庫。 當您向他們添加OpenSSL時,您可以免費獲取FTPS。 如果您不想處理OpenSSL DLL,您可以使用一個商業上可用的庫來支持SSL和FTPS。 再次提醒,沒有免費的SFTP組件可用於.NET。

     Java中,FTPS和SFTP客戶端存在幾個不受支持和錯誤。

     對於所有提到的平台和技術,歡迎您下載SFTP或FTPS組件(都是SecureBlackbox套件的一部分),並自行測試:

  1. .NET時,Windows RT,Silverlight,.NET CF,Windows Phone,Android應用程序 - 點擊這里
  2. Java或Android應用程序 - 點擊這里
  3. Delphi,C ++ Builder,Free Pascal(Windows,Mac OS,Linux)應用程序 - 點擊這里
  4. C ++(Linux,MacOS,iOS)應用程序 - 點擊這里

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM