ProFTPD:TLSconfiguration中“TLSvalidation客户端”和“NoCertRequest”的含义

我知道每个默认FTP都是不安全的,因为它没有encryption。 为了避免这种不安全的FTP行为,我想在我的ProFTPD中设置一个TLSencryption。 根据这个教程: https ://www.howtoforge.com/tutorial/install-proftpd-with-tls-on-ubuntu-16-04/ ProFTPD中的tlsconfiguration应该如下所示:

<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手册:

如果closures,模块将接受证书并build立SSL / TLS会话,但不会validation证书。

如果打开,模块将validation客户端的证书,而且,除非客户端在服务器请求证书时提供证书,否则将失败所有SSL握手尝试。

但是我认为证书来自服务器本身,为什么服务器接受来自客户端的证书请求呢?

而我的第二个问题,TLSoption指令的“nocertrequest”选项的含义是什么?

符合ProFTPD手册,这个选项的function是:

在处理服务器的证书请求时,一些FTP客户端已知是错误的。 此选项会导致服务器在SSL握手期间不包含这样的请求

在这里,同样的问题是,当服务器本身具有TLS证书时,服务器为什么要向客户端发送证书请求。

TLSVerifyClient指令是关于authentication客户端( “客户端authentication”或“相互authentication”); 它用于确定mod_tls是否将从客户端请求证书,以及该客户端提供的证书是否必须是有效的( TLSVerifyClient on )或不是( TLSVerifyClient optional )。 有些网站希望使用客户端提供的证书进行访问控制; 例如,只有从服务器信任的CA颁发证书的客户才被允许。

无论 TLSVerifyClient设置如何TLSVerifyClient的原始实现总是包含对客户端证书的请求。 因此,有“NoCertRequest” TLSOption ,用于禁用客户端证书请求。 但是,现在,NoCertRequest TLSOption已被弃用,仅使用TLSVerifyClient设置; 见Bug#4213 。

希望这可以帮助!

对于更安全的协议,你可以考虑使用SFTP(proftpd支持)。 SFTP通过SSH运行,因此完全encryption。 您可能会发现这个相关的问题有用。 本教程configurationproftpd使用SFTP也可能有所帮助。