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套件的一部分),并自行测试:
- .NET时,Windows RT,Silverlight,.NET CF,Windows Phone,Android应用程序 - 点击这里
- Java或Android应用程序 - 点击这里
- Delphi,C ++ Builder,Free Pascal(Windows,Mac OS,Linux)应用程序 - 点击这里
- C ++(Linux,MacOS,iOS)应用程序 - 点击这里
FTPS (FTP over SSL) vs. SFTP (SSH 文件传输协议): 我们如何做出选择的更多相关文章
- linux之FTP服务搭建 ( ftp文件传输协议 VSFTPd虚拟用户)
FTP服务搭建 配置实验之前关闭防火墙 iptables -F iptables -X iptables -Z systemctl stop firewalld setenforce 0 1.ftp简 ...
- ftp (文件传输协议)
ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...
- 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识
第35章 FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...
- 【计算机网络】2.3 文件传输协议:FTP
第二章第三节 文件传输协议:FTP 在一个典型的FTP(File Transfer Protocol,文件传输协议)会话中,用户坐在一台主机(本地主机)前面,向一台远程主机传输(或接收来自远程主机的) ...
- Linux菜鸟成长日记 ( Linux 下的 ftp 文件传输协议 )
https://blog.csdn.net/buster_zr/article/details/80244542 FTP FTP 是 File Transfer Protocol (文件传输协议)的英 ...
- 文件传输协议FTP、SFTP和SCP
网络通信协议分层 应用层: HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页) DNS(Domain Name System) FTP(File Transf ...
- 【传输文件】文件传输协议FTP、SFTP和SCP
网络通信协议分层 应用层: HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页) DNS(Domain Name System) FTP(File Transf ...
- 【FTP】FTP(文件传输协议)工作原理(SFTP)
目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...
- 文件传输协议:FTP、TFTP、SFTP有什么区别?
一个执着于技术的公众号 FTP 提供一种在服务器和客户机之间上传和下载文件的有效方式:是基于TCP的传输,FTP采用双TCP连接方式:支持授权与认证机制,提供目录列表功能. ---控制连接使用TCP端 ...
随机推荐
- Tsinsen-A1490 osu! 【数学期望】
问题描述 osu!是一个基于<押忍!战斗!应援团><精英节拍特工><太鼓达人>等各种音乐游戏做成的一款独特的PC版音乐游戏.游戏中,玩家需要根据音乐的节奏,通过鼠标 ...
- Delphi 内存分配 StrAlloc New(转)
源:Delphi 内存分配 StrAlloc New 引自:http://anony3721.blog.163.com/blog/static/5119742010824934164/ 给字符指针 ...
- Tsinsen-1486:树【Trie树 + 点分治】
暴力部分: 这个题一开始的想法是 n^2 枚举两个点,然后logn维护LCA,在倍增的同时维护异或值和 k 的个数. s_z_l老爷指导了新的思路,既然这个树只有n^2个LCA,那么枚举LCA,同时向 ...
- Makefile常用调试方法
转载自 陈皓<跟我一起写 Makefile><GNU Make项目管理> GNU make 提供了若干可以协助调试的内置函数以及命令行选项. 1.warning函数 $(war ...
- UVa 481 - What Goes Up
题目大意:给你一系列数,找出它的最长(严格)递增子序列. 由于数据量较大,使用O(n2)的LIS算法会超时,要使用O(nlogn)的LIS算法,这里有详细的介绍. #include <cstdi ...
- Linux用户和用户组管理总结
Linux下和用户和用户组管理有关的配置文件: /etc/group Group account information. /etc/gshadow Secure group account info ...
- 网站环境apache + php + mysql 的XAMPP,如何实现一个服务器上配置多个网站?
xampp 是一个非常方便的本地 apache + php + mysql 的调试环境,在本地安装测试 WordPress 等各种博客.论坛程序非常方便.今天我们来给大家介绍一下,如何使用 XAMPP ...
- 1.4.1. Core Data Helper 简介(Core Data 应用程序实践指南)
有些支持Core Data的内置模板是在应用程序委托里面设置Core Data的.但是为了模块化,我们通过应用程序委托惰性地创建CoreDataHelper类的实例: 初始化托管对象模型 根据托管对象 ...
- 使用ActionBar实现Tab导航
ActionBar还有常用的功能,实现Tab导航.ActionBar在顶端生成多个Tab标签,当用户单击点击某个Tab标签时,系统根据用户点击事件导航指定Tab页面. 为了使用ActionBar实现T ...
- CentOS6.5固定IP方式上网(NAT)
使用NAT模式 虚拟机网络连接使用NAT模式,物理机网络连接使用Vmnet8.如果没有重置一下即可 虚拟机设置里面--网络适配器,网络连接选择NAT模式. 虚拟机菜单栏-编辑-虚拟网络编辑器,选择Vm ...