0
FTP、FTPS 和 SFTP 
一、协议知识 
FTP 
FTP (File Transfer Protocol,RFC 959)是 TCP/IP 网络上用于文件传输的标准协议,基于 C/S 架构,可以上传、下载、删除文
件,创建或改变服务器上的目录。在客户端和服务器间要建立分离的控制和数据连接,控制连接用于 Session 管理,如交换命令和回
复、交换用户标识和密码等,数据连接用于传输数据。FTP使用明文登录协议验证用户名和密码,如果服务器允许也可以匿名连接。 
FTP 有两种传输模式:主动和被动。主动模式时,客户端创建到服务器的 TCP 控制连接,发送客户端 IP 地址和随机的端口号,然
后等待直到服务器初始化数据连接。这种情况下,如果客户端有防火墙,将无法接受进入的 TCP 连接。被动模式时,客户端使用控制
连接向服务器发送 PASV 命令,然后接收服务器 IP 地址和端口号,客户端使用随机端口建立到服务器的数据连接。由于控制连接和数
据连接都由客户端发起,这就可以解决防火墙问题。 
多数浏览器和文件管理器都能连接 FTP 服务器,默认大都使用被动模式。FTP URL 语法如下: 
ftp://[<user>[:<password>]@]<host>[:<port>]/<url-path> 
FTP 不是一个安全的协议,所有的用户名、密码、命令和数据等都使用明文传输,非常容易就可以截获这些内容。在加密机制创立
前设计的的网络协议,如 SMTP、Telnet、POP、IMAP,都有这个问题。 
参考文档 http://en.wikipedia.org/wiki/FTP  
FTPS 
FTP over SSL,常被称为 Secure FTP,它是构建在SSL/TLS(RFC5246,Secure Socket Layer/Transport Layer Security)协议
之上的,通过 SSL/TLS 对信道进行加密传输,它本身还需要 FTP 服务器的支持,又分为显示和隐式。 
显示 FTPS 又称为 FTPES,是对FTP 标准的扩展,客户端必须显示请求(客户端发送"AUTH TLS"命令)对 FTP 会话加密。如果客户
端不要求加密,服务器也允许非加密通讯。服务器可以选择允许或拒绝未请求 TLS 的连接。这个扩展协议在推荐标准 RFC4217 中定义。 
隐式 FTPS 是过期的 FTP 标准,需要所有客户端都使用 SSL 或TLS 连接。为了保持兼容性,隐式 FTPS 控制连接使用 990 端口,数
据连接使用 989 端口。注意,隐式 FTPS 未在 RFC4217 中定义。 
FTPS 支持如下验证方式: 
1、密码验证 
2、SSL 证书验证 
参考文档 http://en.wikipedia.org/wiki/FTPS  
SFTP 
SFTP(SSH File Transfer Protocol)是 SSH 2.0 的一项扩展协议,提 的文件访问、文件传输和文件管理功能。SFTP协议的
目标是通过任何可靠的数据流提 SFTP 协议虽然在SSH2 协议中
描述,但它是通用的,独立于 SSH2 套件中的其余协议。SFTP常作为 SSH2.0 实现的一个子系统。 
SFTP 除了也有文件传输功能,有相似的命令集外,与 FTP 是无关的。与标准 FTP 不同,它加密命令和数据,以防止在网络上明文
传输密码和敏感信息。功能上与 FTP 相似,但由于使用了不同的协议,不能使用标准的 FTP 客户端与 SFTP 服务器通讯,也不能使用
SFTP 客户端与FTP 服务器通讯。 
SFTP 是二进制协议,所有的命令(请求)都打包成二进制消息后发送到服务器,服务器回复二进制应答包。 
与早期的仅支持文件传输的 SCP 协议(SSH1.x 中的)相比,SFTP 协议支持更广泛的远程文件操作。SFTP 客户端增加的额外功能
包括:恢复中断的传输、目录列表、远程文件删除。SFTP 服务器支持大多数平台。SSH 1是过时的,不安全的,不推荐使用。 
FTPS 和 SFTP 相同点在于都组合使用了对称加密算法(DES/3DES,AES 等)、非对称加密算法(RSA,DSA)和密钥交换算法。不同之
处在于他们的验证方式,FTPS 使用 X.509 证书验证,而 SFTP 使用 SSH 密钥。X.509 证书包含公钥和证书持有者信息,通过这些信息,
另一方可以校验证书本身的完整性和验证证书持有者。SSH密钥仅包含公钥。 
SSH 服务器提 下3 种验证方式: 
1、密码验证 
2、密钥验证 
3、密码加密钥验证 
关于验证方式的选择,推荐使用密钥验证,其安全性高于单纯的密码验证。 
目前使用最广泛的 SFTP 服务器是 OpenSSH。 
参考文档 http://en.wikipedia.org/wiki/SSH_file_transfer_protocol  
FTP over SSH 
FTP over SSH refers to the practice of tunneling a normal FTP session over an SSH connection. 
因为 FTP 使用了多个TCP 连接,通过 SSH 隧道技术是很难实现的。对于许多 SSH 客户端,试图为控制通道建立一个隧道,只能保
护这一个通道,当传输数据时,FTP 软件将建立新的 TCP 连接(数据通道),将绕开 SSH连接,因而没有机密性、完整性保护。否则,
SSH 客户端软件应具有 FTP 协议知识,监控和重写 FTP 控制通道消息,自主为 FTP 数据通道打开新的数据包转发。 
因此,此方案技术上可行,但非常少用。 
参考文档 http://en.wikipedia.org/wiki/FTPS  
其他参考文档 http://blog.csdn.net/summerfang/article/details/781086  
二、FTPS vs SFTP 
请参考文档 FTPS vs. SFTP: What to Choose 
三、Java 客户端 API 
Apache Commons Net 
支持的协议:     FTP/FTPS    FTP over HTTP (experimental)    NNTP    SMTP(S)    POP3(S)    IMAP(S)    Telnet    TFTP    Finger    Whois    rexec/rcmd/rlogin    Time (rdate) and Daytime    Echo    Discard    NTP/SNTP 
ftp4j 
ftp4j 是实现了全功能 FTP 客户端的 Java 类库(LGPL license),通过它可以传输文件(上传和下载),浏览远程 FTP 站点(包括
目录列表),创建、删除、重命名、移动远程目录和文件。ftp4j 提 FTP 服务器,包括:通过 TCP/IP直接连接,
通过 FTP 代理、HTTP 代理、SOCKS 4/4a 代理和SOCKS 5 代理连接。 
支持 FTPS(FTP over implicit TLS/SSL) 和FTPES (FTP over explicit TLS/SSL)。 
jsch 
SSH2 的纯Java 实现(BSD style license),可以连接到sshd服务器,使用端口转发、X11转发、文件传输(支持 sftp 版本 0、1、
2、3)等。支持 http 代理、SOCKS5 代理连接。 
Jftp 
Java Network Browser,支持多平台、多协议的网络浏览器。起初 jftp 只是一个 ftp 客户端,现在已经发展为支持 file、ftp、
smb、http、sftp、 nfs 和 raw tcp/ip 等多种协议。从 1.53 版本开始使用 jsch 来支持 sftp。Jftp 不仅提供了图形操
以使用 jftp.jar 中的 API(GPL license)。 
四、FTP 客户端 
FileZilla 
支持 FTP、FTPS、SFTP,支持多种平台,支持多种语言,支持 HTTP/1.1、SOCKS5、 FTP 代理。 
Core FTP 
Windows FTP 客户端,支持 FTP、FTPS、SFTP。 
FTP 客户端比较: http://en.wikipedia.org/wiki/Comparison_of_FTP_client_software  
SSH 客户端比较: http://en.wikipedia.org/wiki/Comparison_of_SSH_clients  
五、服务器 
Apache SSHD 
Apache SSHD 是支持 SSH 协议的 100%纯 Java 类库,可用于客户端和服务端,很容易将其嵌入到你的应用中作为一个 SSH 服务器。
OpenSSH 
支持 SSH 协议的所有版本。OpenSSH 使用ssh 程序取代了rlogin 和telnet,scp 取代了rcp, sftp 取代了 ftp。也包括 sshd ,和
其他的工具如:ssh-add、 ssh-agent、 ssh-keysign、 ssh-keyscan、 ssh-keygen 和sftp-server。 
copssh 
Copssh 是一个 OpenSSH 服务器和客户端的 windows 系统的实现,有图形管理界面。它包装了 OpenSSH、Cygwin 和一些流行工具, 
附加了一些安全相关的最佳实践。可以使用 Copssh 安全地远程管理系统或收集远程信息。不幸的是,新版本不是免费的了。 
Kypm 
KpyM Telnet/SSH Server ( KTS )是 Windows 平台的开源 telnet 和 ssh 服务器。最新版本 1.19C,更新日期为 2011-01-29。 
Dropbear SSH server and client 
Dropbear 是开源、MIT-style license 的 SSH 2 服务器和客户端,特别适用于嵌入型 Linux (或其他 Unix)系统, 如无线路由。 
FTP 服务器比较:http://en.wikipedia.org/wiki/Comparison_of_FTP_server_software  
SSH 服务器比较:http://en.wikipedia.org/wiki/Comparison_of_SSH_servers 
关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.