我知道默认情况下 FTP 是不安全的,因为它没有加密。为了避免 FTP 的这种不安全行为,我想在我的 ProFTPD 中设置 TLS 加密。按照此处的教程:https://www.howtoforge.com/tutorial/install-proftpd-with-tls-on-ubuntu-16-04/ProFTPD 中的 tls 配置应如下所示:
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol TLSv1.2
TLSCipherSuite AES128+EECDH:AES128+EDH
TLSOptions NoCertRequest AllowClientRenegotiations
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient off
TLSRequired on
RequireValidShell no
</IfModule>
许多这些指令都是不言自明的,但我仍然不知道指令“TLSVerifyClient”是什么意思。
根据 ProFTPD 手册:
如果关闭,模块将接受证书并建立 SSL/TLS 会话,但不会验证证书。
如果打开,模块将验证客户端的证书,而且,除非客户端在服务器请求证书时出示证书,否则所有 SSL 握手尝试都将失败。
但我认为证书来自服务器本身,那么服务器为什么要接受来自客户端的证书请求?
我的第二个问题是,TLSoption 指令的“nocertrequest”选项是什么意思?
按照ProFTPD手册的说法,该选项的作用是:
某些 FTP 客户端在处理服务器证书请求时存在错误。此选项使服务器在 SSL 握手期间不包含此类请求
这里有同样的问题,当服务器本身有 TLS 证书时,为什么服务器会向客户端发送证书请求。
答案1
这TLSVerifyClient
指令是关于对客户端进行身份验证(IE“客户端认证”或“相互认证”);用于确定是否mod_tls
向客户端请求证书,以及客户端提供的证书是否必须有效 ( TLSVerifyClient on
) 或无效 ( TLSVerifyClient optional
)。某些站点希望使用客户端提供的证书进行访问控制;例如,只有出示服务器信任的 CA 颁发的证书的客户端才被允许。
的原始实现mod_tls
总是包含对客户端证书的请求,不管的TLSVerifyClient
设置。因此,出现了“NoCertRequest” TLSOption
,用于禁用该客户端证书请求。但是,现在 NoCertRequestTLSOption
已被弃用,取而代之的是仅使用设置TLSVerifyClient
;请参阅错误#4213。
希望这可以帮助!
答案2
对于更安全的协议,您可以考虑使用 SFTP(proftpd 支持)。SFTP 通过 SSH 运行,因此完全加密。您可能会发现这个相关问题很有用。本教程配置 proftpd 以使用 SFTP也可能有帮助。