ProFTPD:TLS 配置中的“TLS Verify Client”和“NoCertRequest”的含义

ProFTPD:TLS 配置中的“TLS Verify Client”和“NoCertRequest”的含义

我知道默认情况下 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也可能有帮助。

相关内容