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

FTP、FTPS和SFTP相关推荐

  1. 【扫盲】什么是FTP、FTPS 和 SFTP?

    无论是网盘还是云存储,上传都是一项很简单的操作.那些便捷好用的上传整理工具所用的 FTP 协议到底是什么意义,繁杂的模式又有何区别? 二狗子最近搭建了一个图片分享网站,每天都有好多人在他的网站上传许多 ...

  2. 浅谈 FTP、FTPS 与 SFTP

    无论是网盘还是云存储,上传都是一项很简单的操作.那些便捷好用的上传整理工具所用的 FTP 协议到底是什么意义,繁杂的模式又有何区别? 二狗子最近搭建了一个图片分享网站,每天都有好多人在他的网站上传许多 ...

  3. ftp改为sftp_科普!一文详解 FTP、FTPS 与 SFTP 的原理

    FTP.FTPS 与 SFTP 简介 FTP FTP 即 文件传输协议(英语:File Transfer Protocol 的缩写)是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议. ...

  4. ftp改为sftp_浅谈 FTP、FTPS 与 SFTP

    二狗子最近搭建了一个图片分享网站,每天都有好多人在他的网站上传许多照片,这些照片还会通过内部的逻辑同步到又拍云存储中,非常方便. 但不久后问题就来了,由于刚开始的用户照片管理规划没有做好,随着用户上传 ...

  5. 详解 FTP、FTPS 与 SFTP 的原理

    FTP.FTPS 与 SFTP 简介 FTP FTP 即 文件传输协议(英语:File Transfer Protocol 的缩写)是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议. ...

  6. FTPS、SFTP和FTP的区别与联系

    本文主要综合了这篇和这篇以及自己的理解,简单解释FTP.FTPS和SFTP的区别和联系 FTP FTP,是File Transport Protocol的简称,是一个古老的文件传输协议(大概互联网出现 ...

  7. EditPlus中文版-具有 FTP、FTPS 和 sftp 功能的文本编辑器

    EditPlus - 具有 FTP.FTPS 和 sftp 功能的文本编辑器 EditPlus 是一款适用于 Windows 的文本编辑器,具有内置的 FTP.FTPS 和 sftp 功能. 虽然它可 ...

  8. 站长管理服务器必读:Ftp、Ftps与Sftp三兄弟的不同与区别以及部署全指引

    文章标题: 站长管理服务器必读:Ftp.Ftps与Sftp三兄弟的不同与区别以及部署全指引 关键字 : ftp,sftp,freesshd,ftps 文章分类: 教程 创建时间: 2020年3月23日 ...

  9. FTP、FTPS与SFTP定义与联系

    一.FTP 定义解释: FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时 ...

最新文章

  1. 95E Lucky Country
  2. php中复选框删除数据_checkbox 删除,checkbox_PHP教程
  3. 关于产品 / 市场契合点 PMF 的 12 个问题全解读(下)
  4. split分片主要源码解析
  5. c++ 绘制函数图像_图像轮廓和分水岭算法
  6. MATLAB飞机大战第二版,windows程序设计——飞机大战札记(单文档文件登陆界面)...
  7. 35岁中年博士失业,决定给找高校教职的后辈一些建议
  8. System学习笔记001---WIN10 win10按哪里哪里出现蓝色框
  9. tornado和subprocess实现程序的非堵塞异步处理
  10. Windows Server 2008远程桌面多用户登陆的配置方法
  11. 2020 最烂密码 TOP 200 大曝光,霸榜的仍旧是 123456!
  12. 与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。
  13. Flash loader demo下载与使用之最小系统STM32C8T6使用USB转TTL串口下载
  14. Nvidia显卡驱动升级
  15. MSOCache文件夹能否删除
  16. 从技术角度告诉你,区块链到底有哪些特点和运作机制
  17. C# F23.StringSimilarity库 字符串重复度、文本相似度、防抄袭
  18. 服务器断电mysql文件丢失_服务器断电了怎么恢复数据?
  19. 驴途网--技术小结1
  20. 鲁大师Q1季度电脑硬件报告:intel 12代酷睿笔记本霸榜,显卡小幅降价

热门文章

  1. 1. SCARA机器人建模
  2. Android客户端之“微服私访”App的系统学习(一) 本地服务端环境的搭建和部署
  3. USB_HID协议基础
  4. 【前端开发】Vue + Fabric.js + Element-plus 实现简易的H5可视化图片编辑器
  5. 双色球的篮球购买保本的买法计算!
  6. 什么是三目运算符?对三目运算符的理解
  7. 一套系统要不要这样贵,5亿美元
  8. Android-仿QQ表情库、表情混合文字聊天图文
  9. layui js 自定义打印功能实现
  10. Expert 诊断优化系列------------------内存不够用么?