FTP、FTPS和SFTP

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 是实现了全功能 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

ftp4j


支持 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

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值