SFTP 和 FTPS 协议

前言

就在一周前,我正在写一篇关于标题中所示主题的文章,并面临这样一个事实:互联网上没有那么多教育信息。 主要是枯燥的事实和设置说明。 因此,我决定稍微修改一下文字,并将其作为一篇文章发布。

什么是FTP

FTP(文件传输协议)是一种通过网络传输文件的协议。 它是基本以太网协议之一。 1971 年出现,最初在 DARPA 网络工作。 目前,与HTTP一样,文件传输基于由一组TCP/IP(传输控制协议/互联网协议)协议组成的模型。 在 RFC 959 中定义。

该协议定义了以下内容:

  • 错误检查将如何进行?
  • 数据打包方式(如果使用打包)
  • 发送设备如何表明它已完成一条消息?
  • 接收设备如何表明已收到消息?

客户端和服务器之间的通信

让我们仔细看看 FTP 操作过程中发生的过程。 连接由用户的协议解释器初始化。 交换通过 TELNET 标准中的控制通道进行控制。 FTP命令由用户的协议解释器生成并发送到服务器。 服务器的响应也通过控制通道发送给用户。 一般来说,用户能够通过用户解释器以外的方式与服务器的协议解释器建立联系。

FTP的主要特点是它使用双连接。 其中之一用于向服务器发送命令,默认情况下通过 TCP 端口 21 发生,该端口可以更改。 只要客户端与服务器通信,控制连接就存在。 在机器之间传输数据时,控制通道必须打开。 如果关闭,则数据传输停止。 通过第二个,发生直接数据传输。 每次客户端和服务器之间发生文件传输时都会打开它。 如果同时传输多个文件,每个文件都会打开自己的传输通道。

FTP 可以在主动或被动模式下运行,这两种模式的选择决定了连接的建立方式。 在主动模式下,客户端与服务器建立TCP控制连接,并将其IP地址和任意客户端端口号发送到服务器,然后等待服务器使用该地址和端口号启动TCP连接。 如果客户端位于防火墙后面并且无法接受传入的 TCP 连接,则可以使用被动模式。 在此模式下,客户端使用控制流向服务器发送 PASV 命令,然后从服务器接收其 IP 地址和端口号,然后客户端使用这些信息从其任意端口打开数据流。

数据可能会传输到第三台机器。 在这种情况下,用户组织与两个服务器的控制通道并组织它们之间的直接数据通道。 控制命令通过用户,数据直接在服务器之间传递。

通过网络传输数据时,可以使用四种数据表示形式:

  • ASCII – 用于文本。 如果需要,数据在传输之前从发送主机上的字符表示形式转换为“八位 ASCII”,并且(如果需要,再次)转换为接收主机上的字符表示形式。 特别是,换行符发生了变化。 因此,此模式不适合仅包含纯文本的文件。
  • 二进制模式 - 发送设备逐字节发送每个文件,接收方在收到后存储字节流。 建议所有 FTP 实现都支持此模式。
  • EBCDIC – 用于以 EBCDIC 编码在主机之间传输纯文本。 除此之外,该模式与 ASCII 模式类似。
  • 本地模式 - 允许两台具有相同设置的计算机以自己的格式发送数据,而无需转换为 ASCII。

数据传输可以通过以下三种模式中的任意一种进行:

  • 流模式 - 数据作为连续流发送,使 FTP 免于执行任何处理。 相反,所有处理都是通过 TCP 完成的。 除了将数据分隔成记录之外,不需要文件结束指示符。
  • 块模式 - FTP 将数据分成几个块(标头块、字节数、数据字段),然后将它们传输到 TCP。
  • 压缩模式 – 使用单一算法压缩数据(通常通过编码游程长度)。

FTP服务器是提供使用文件传输协议能力的服务器。 它具有与传统 Web 服务器不同的某些特征:

  • 需要用户身份验证
  • 所有操作均在当前会话内执行
  • 能够使用文件系统执行各种操作
  • 每个连接使用单独的通道

FTP 客户端是一个程序,允许您通过 FTP 连接到远程服务器,并使用文件系统的元素对其执行必要的操作。 客户端很可能是一个浏览器,您应该在其地址栏中输入地址,该地址是远程服务器上特定目录或文件的路径,按照一般的 URL 框图:

ftp://user:pass@address:port/directory/file

但是,在这种情况下使用网络浏览器将仅允许您查看或下载感兴趣的文件。 为了充分利用FTP的所有优点,您应该使用专门的软件作为客户端。

FTP 身份验证使用用户名/密码方案来授予访问权限。 用户名通过 USER 命令发送到服务器,密码通过 PASS 命令发送到服务器。 如果服务器接受客户端提供的信息,则服务器将向客户端发送邀请,会话开始。 如果服务器支持此功能,用户可以在不提供凭据的情况下登录,但服务器只能为此类会话授予有限的访问权限。

提供FTP服务的主机可以提供匿名FTP访问。 用户通常使用“匿名”(在某些 FTP 服务器上可能区分大小写)作为用户名登录。 尽管通常会要求用户提供电子邮件地址而不是密码,但实际上不会执行任何验证。 许多提供软件更新的 FTP 主机支持匿名访问。

协议图

FTP 连接期间的客户端-服务器交互可以可视化如下:

SFTP 和 FTPS 协议

安全FTP

FTP 最初并不是为了保证安全,因为它用于多个军事设施和机构之间的通信。 但随着互联网的发展和普及,未经授权访问的危险增加了许多倍。 需要保护服务器免受各种类型的攻击。 1999 年 2577 月,RFC XNUMX 的作者将这些漏洞总结为以下问题列表:

  • 隐藏攻击(反弹攻击)
  • 欺骗攻击
  • 暴力攻击
  • 数据包捕获、嗅探
  • 端口窃取

常规FTP不具备以加密形式传输数据的能力,因此用户名、密码、命令等信息很容易被攻击者截获。 此问题的通常解决方案是使用易受攻击的协议 (FTPS) 的“安全”、受 TLS 保护的版本或其他更安全的协议,例如大多数 Secure Shell 协议实现中提供的 SFTP/SCP。

FTPS

FTPS (FTP + SSL) 是标准文件传输协议的扩展,它在其基本功能中添加了使用 SSL(安全套接字层)协议创建加密会话的功能。 如今,保护由更先进的模拟 TLS(传输层安全)提供。

SSL

SSL 协议由 Netscape Communications 于 1996 年提出,旨在确保 Internet 连接的安全性和隐私性。 该协议支持客户端和服务器身份验证,独立于应用程序,并且对 HTTP、FTP 和 Telnet 协议是透明的。

SSL 握手协议由两个阶段组成:服务器身份验证和可选的客户端身份验证。 在第一阶段,服务器通过发送其证书和加密参数来响应客户端的请求。 然后客户端生成主密钥,使用服务器的公钥对其进行加密,然后将其发送到服务器。 服务器用其私钥解密主密钥,并通过返回由客户端主密钥验证的消息来向客户端验证自己的身份。

后续数据将使用从此主密钥派生的密钥进行加密和验证。 第二步是可选的,服务器向客户端发送请求,客户端通过使用自己的数字签名和公钥证书返回请求来向服务器验证自己的身份。

SSL 支持多种加密算法。 在建立通信过程中,使用RSA公钥密码系统。 密钥交换后,使用许多不同的密码:RC2、RC4、IDEA、DES 和 TripleDES。 还使用 MD5——一种用于创建消息摘要的算法。 X.509 中描述了公钥证书的语法。

SSL 的重要优势之一是其完全独立于软件平台。 该协议是根据可移植性原则开发的,其构造的思想并不取决于使用它的应用程序。 此外,其他协议可以透明地叠加在 SSL 协议之上也很重要; 要么进一步提高目标信息流的保护程度,要么使 SSL 的加密功能适应某些其他明确定义的任务。

SSL 连接

SFTP 和 FTPS 协议

SSL 提供的安全通道具有三个主要属性:

  • 该频道是私人的。 经过简单的对话后,所有消息都会被加密,以确定密钥。
  • 该通道已通过身份验证。 会话的服务器端始终经过身份验证,而客户端则可选择进行身份验证。
  • 渠道可靠。 消息传输包括完整性检查(使用 MAC)。

FTPS的特点

FTPS 有两种实现方式,使用不同的方法提供安全性:

  • 隐式方法涉及在发送数据之前使用标准 SSL 协议建立会话,这反过来又破坏了与常规 FTP 客户端和服务器的兼容性。 为了向后兼容不支持FTPS的客户端,TCP端口990用于控制连接,989用于数据传输,保留了FTP协议的标准端口21。 此方法被认为已过时。
  • 显式更方便,因为它使用标准 FTP 命令,但在响应时对数据进行加密,这允许您对 FTP 和 FTPS 使用相同的控制连接。 客户端必须明确请求服务器进行安全数据传输,然后批准加密方法。 如果客户端不请求安全传输,FTPS 服务器有权维持或关闭不安全的连接。 RFC 2228 添加了身份验证和数据安全协商机制,其中包括新的 FTP AUTH 命令。 尽管该标准没有明确定义安全机制,但它确实指定客户端必须使用上述算法发起安全连接。 如果服务器不支持安全连接,则应返回错误码504。FTPS客户端可以使用FEAT命令获取服务器支持的安全协议信息,但服务器不需要透露其所支持的安全级别。支持。 最常见的 FTPS 命令是 AUTH TLS 和 AUTH SSL,它们分别提供 TLS 和 SSL 安全性。

SFTP

SFTP(安全文件传输协议)是一种运行在安全通道之上的应用层文件传输协议。 不要与(简单文件传输协议)混淆,它具有相同的缩写。 如果说 FTPS 只是 FTP 的扩展,那么 SFTP 就是一个独立且不相关的协议,它使用 SSH(Secure Shell)作为其基础。

安全外壳

该协议由 IETF 的一个名为 Secsh 的小组开发。 新SFTP协议的工作文档并未成为正式标准,但开始积极用于应用程序开发。 随后,该协议发布了六个版本。 然而,其中功能的逐渐增加导致了14年2006月XNUMX日,由于该项目的主要任务(SSH开发)完成并且缺乏具有足够的专家水平,可以继续开发成熟的远程文件系统协议。

SSH 是一种网络协议,允许远程控制操作系统和 TCP 连接隧道(例如,用于文件传输)。 其功能与 Telnet 和 rlogin 协议类似,但与它们不同的是,它会加密所有流量,包括传输的密码。 SSH 允许选择不同的加密算法。 SSH 客户端和 SSH 服务器可用于大多数网络操作系统。

SSH 允许您在不安全的环境中安全地传输几乎任何其他网络协议。 因此,您不仅可以通过命令 shell 在计算机上远程工作,还可以通过加密通道传输音频流或视频(例如,来自网络摄像头)。 SSH还可以使用传输数据的压缩来进行后续加密,这对于例如远程启动X WindowSystem客户端来说很方便。

该协议的第一个版本 SSH-1 由赫尔辛基理工大学(芬兰)的研究人员 Tatu Ulönen 于 1995 年开发。 SSH-1 的编写目的是提供比 rlogin、telnet 和 rsh 协议更好的隐私性。 1996 年,开发了更安全的协议版本 SSH-2,它与 SSH-1 不兼容。 该协议变得更加流行,到 2000 年它已经拥有大约 2 万用户。 目前,术语“SSH”通常指的是 SSH-2006,因为由于存在重大缺陷,该协议的第一个版本现在实际上尚未使用。 XNUMX年,该协议被IETF工作组批准为互联网标准。

SSH 有两种常见的实现:私有商业和免费开源。 免费的实现称为 OpenSSH。 到 2006 年,互联网上 80% 的计算机使用 OpenSSH。 该专有实施由 Tectia Corporation 的全资子公司 SSH Communications Security 开发,并且免费供非商业用途使用。 这些实现包含几乎相同的命令集。

与 telnet 协议不同,SSH-2 协议可以抵抗流量窃听攻击(“嗅探”),但不能抵抗中间人攻击。 SSH-2 协议还可以抵抗会话劫持攻击,因为不可能加入或劫持已建立的会话。

为了防止在连接到客户端尚不知道密钥的主机时发生中间人攻击,客户端软件会向用户显示“密钥指纹”。 建议仔细检查客户端软件显示的“密钥快照”与服务器密钥快照,最好通过可靠的沟通渠道或亲自获取。

所有类 UNIX 系统都提供 SSH 支持,并且大多数系统都具有 ssh 客户端和服务器作为标准实用程序。 非 UNIX 操作系统有多种 SSH 客户端实现。 在流量分析器和中断本地网络运行的方法广泛发展后,该协议获得了广泛的欢迎,作为管理重要节点的不安全 Telnet 协议的替代解决方案。

使用 SSH 进行通信

要通过 SSH 工作,您需要 SSH 服务器和 SSH 客户端。 服务器侦听来自客户端计算机的连接,并在建立连接后执行身份验证,然后开始为客户端提供服务。 客户端用于登录远程计算机并执行命令。

SFTP 和 FTPS 协议

与FTPS的比较

SFTP 与标准 FTP 和 FTPS 的主要区别在于,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 证书进行身份验证,但它们实际上并不验证整个证书链 - 仅使用公钥(这使得此类身份验证不完整)。

结论

尽管 FTP 协议历史悠久,但无疑在网络信息存储和分发方面仍然发挥着重要作用。 它是一种方便、多功能、标准化的协议。 许多档案档案都是建立在它的基础上的,没有它,技术工作就不会如此有效。 此外,它很容易设置,并且几乎所有当前和非当前平台都存在服务器和客户端程序。

反过来,其受保护版本解决了现代世界中存储和传输数据的机密性问题。 两种新协议都有其优点和缺点,并且作用也略有不同。 在需要文件存档的区域,最好使用 FTPS,特别是如果之前已经使用过经典 FTP。 SFTP 由于与旧协议不兼容而不太常见,但它更安全且具有更多功能,因为它是远程管理系统的一部分。

来源清单

来源: habr.com

添加评论