我知道每个默认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证书。
- 保护仅SVN的服务器
- nginx,应该由www-data拥有的所有文件?
- 为什么SQL Server会在我创build的每个新数据库中为本地pipe理员帐户自动创build显式用户映射?
- SQL Server审计跟踪的最佳实践
- 信息曝光
如果打开,模块将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也可能有所帮助。