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端 ...
随机推荐
- IOS开发之IOS8.0最新UIAlertController
最近苹果更新的IOS8 对以前进行了很大的修改, 更新的API也让人捉急,据说iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.比如全新的UIPrese ...
- 【转】14个最佳的HTML/CSS设计和开发框架
专业的网页设计是既复杂又耗时的.它需要HTML和CSS框架的完美结合.这些框架不仅可以为设计方案增加特定的功能,还可以大大地节省时间和精力. 高效的框架不仅是网站设计的基础,它提供的各种丰富多彩的功能 ...
- DateFormat 竟然是非线程安全的?!!!!!
今天撸代码忽然发现一个奇怪的一场抛出,经过一番排查发现有可能DateFormat 的多线程问题造成的,网上一查DateFormat竟然非线程安全.那我原先的代码...(细思极恐)
- Memcached源码分析之线程模型
作者:Calix 一)模型分析 memcached到底是如何处理我们的网络连接的? memcached通过epoll(使用libevent,下面具体再讲)实现异步的服务器,但仍然使用多线程,主要有两种 ...
- 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密
在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...
- FlexGrid简单demo
1.首先加入以下代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...
- java监听事件
2014年2月23日 09:51:54 成功添加了打开官网的事件, 回头研究下,那个打开url的类 java的System.getProperty()方法可以获取的值 ################ ...
- Android应用性能优化方案
1.避免创建不必要的对象 2.如果方法用不到成员变量,可以把方法声明为静态(static),这样性能会提高百分之十五到百分之二十 3.避免使用get/set存取字段,可以把字段声明为public直接访 ...
- 按ctrl + c 播放下一曲音乐
./a.out . #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<dirent. ...
- Bootstrap入门(二十三)JS插件1:模态框
Bootstrap入门(二十三)JS插件1:模态框 1.静态实例 2.动态实例 3.模态框的尺寸和效果 4.包含表单的模态框 模态框经过了优化,更加灵活,以弹出对话框的形式出现,具有最小和最实用的功能 ...