Apache HTTP Server 版本 2.4
可用语言: en
对 FTP over TLS 的支持允许您通过 TLS 加密和证书身份验证支持安全地运行 FTP 连接。Apache mod_ftp 通过 Apache 自身的 mod_ssl 支持符合 RFC 的 TLS 支持。
由于 FTP 协议是在加密安全成为重要考虑因素之前开发的,因此它最初被设计为明文协议。命令通道和数据通道都是,并且在许多情况下仍然是未加密的。如今,这是不可取的,因为用户的登录名和密码在网络上以明文形式传输,并且可能很容易被恶意入侵者检测到。相反,用户将无法轻松地检测到伪造的服务器地址,因为服务器无法通过证书识别自己。
为了解决这些限制,开发了 FTP over TLS 协议,并成为 RFC 4217 中描述的互联网标准。FTP over TLS 协议使用 TLS 连接升级,其中客户端和服务器在升级到加密连接之前协商其功能和能力。
Apache HTTP Server 的 mod_ftp 模块旨在实现 RFC 4217 中定义的 FTP over TLS。RFC 描述了 FTP 客户端和服务器如何发现彼此的安全能力,以及客户端如何升级 FTP 控制通道以使用 TLS 保护。这种连接升级行为类似于 RFC 3207 中描述的 SMTP over TLS 标准,允许 FTP over TLS 服务器在与明文 FTP 服务器相同的端口上运行,并同时提供明文和受保护的服务。
FTP 协议规范规定,由客户端指定会话属性,例如保护级别。服务器不能要求客户端使用 TLS,但它可以拒绝接受来自客户端的任何命令,直到它发送 AUTH TLS
FTP 命令以将控制通道升级到 TLS 保护。请参阅 FTPOptions
,特别是 RequireSSL
选项,以使服务器拒绝任何 FTP 命令,直到建立 TLS 会话。
使用 TLS 允许服务器和客户端使用标准 SSL 证书识别自己。通常,服务器上会使用证书,但可以配置服务器以请求客户端证书进行身份验证。RFC 4217 要求客户端即使在提供证书的情况下也要发送 USER
命令,但服务器可以放弃要求客户端提供密码。
由于 FTP over TLS RFC 仅在 2005 年发布,因此出现了几种替代方法来保护文件传输连接。除了 RFC 中定义的正常 FTP 连接上的 TLS 连接升级之外,另一种流行的方法是定义一个单独的 FTP 控制通道监听器,该监听器只能通过 SSL 访问。SSL 握手必须在进行第一次 FTP 协议交换之前完成。这种方法被称为隐式 SSL,受 mod_ftp 支持。最后,一些 FTP 客户端和服务器支持通过 SSH 进行文件传输。这种方法不受 mod_ftp 支持。
为了实现 TLS,mod_ftp 使用 Apache 的 mod_ssl
。这意味着 FTP over TLS 的配置选项与 HTTPS 的配置选项没有太大区别。实际上,对于基于 RFC 4217 的 FTP over TLS 支持,除了您用于设置 HTTP over SSL 虚拟主机之外,不需要其他配置选项。但是请注意,我们明确关闭了 AcceptFilter
。这是必要的,因为在 FTP 中,服务器启动协议对话,而不是客户端。
LoadModule ftp_module /usr/local/apache2/modules/mod_ftp.so
Listen 21 ftp
AcceptFilter ftp none
LogFormat "%u [%a] %r %>s" ftp_command
LogFormat "%{%b %e %H:%M:%S %Y}t %T %a %B %U %M %F %d %W %u %S %Z %Y" ftp_transfer
<VirtualHost _default_:21>
FTP On
SSLEngine on
SSLCertificateFile conf/server.crt
SSLCertificateKeyFile conf/server.key
ErrorLog logs/ftps_error_log
CustomLog logs/ftps_command_log ftp_command
CustomLog logs/ftps_transfer_log ftp_transfer env=do_transfer_log
</VirtualHost>
下面的配置类似于上面的配置,除了 FTPImplicitSSL
和监听端口为 990
。 AcceptFilter
设置为 data
,因为对话从客户端的 SSL 握手开始。
LoadModule ftp_module /usr/local/apache2/modules/mod_ftp.so
Listen 990 ftps
AcceptFilter ftps data
LogFormat "%u [%a] %r %>s" ftp_command
LogFormat "%{%b %e %H:%M:%S %Y}t %T %a %B %U %M %F %d %W %u %S %Z %Y" ftp_transfer
<VirtualHost _default_:990>
FTP On
SSLEngine On
FTPImplicitSSL On
SSLCertificateFile ssl/server.crt
SSLCertificateKeyFile ssl/server.key
ErrorLog logs/ftps_error.log
CustomLog logs/ftps_command.log ftp_command
CustomLog logs/ftps_transfer.log ftp_transfer env=do_transfer_log
DocumentRoot "/usr/local/apache2/htdocs"
</VirtualHost>
越来越多的 FTP 客户端实现了 FTP over TLS,列出所有客户端超出了本文档的范围。可以在 维基百科 上找到列表。在选择客户端时,请记住,mod_ftp
不支持FTP over SSH 协议(有时也称为SFTP)。
可用语言: en