1.建目录存放SSL/TLS用到的key
mkdir /etc/ssl/private
2.生成自签名key和证书
使用命令:openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/certs/vsftpd.crt
生成自签名key和证书过程中,Common Name填写服务器IP,其它可以忽略。

备注:如已购买SSL,可将购买SSL的key放至/etc/ssl/private/,证书放至/etc/ssl/certs/。
3.配置vsftpd使用SSL/TLS
编辑/etc/vsftpd/vsftpd.conf,在文件末尾增加如下配置项:
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1_1=YES
ssl_tlsv1_2=YES
ssl_tlsv1=NO
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=YES
ssl_ciphers=HIGH
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
保存文件并重启vsftpd:
systemctl restart vsftpd
备注:SSL配置项说明
//强制用户名/密码和数据进行SSL/TLS加密
force_local_data_ssl=YES
force_local_logins_ssl=YES
//使用TLS 1.1和1.2提供的更强、更好的加密
ssl_tlsv1_1=YES
ssl_tlsv1_2=YES
//TLS 1.0变得不安全了,所以要禁用它。请注意,一些较老的FTP客户端与新的TLS版本不兼容,可能需要将该选项设置为“YES”。
ssl_tlsv1=NO
//额外的保护设置以对抗MITM攻击。这可能与一些较老的FTP客户端不兼容。如果遇到连接丢失,请将此选项设置为“NO”。
require_ssl_reuse=YES
//要求服务器使用更强的密码套件
ssl_ciphers=HIGH
4.客户端测试:
4.1 windows客户端(示例filezilla client)配置:
(1)加密下拉框选择“要求显式的FTP over TLS”

(2)连接后出现证书提示,点击确定:

(3)已连接登录FTP:

4.2 Linux客户端(示例lftp)配置:
(1)首先安装lftp:yum -y install lftp
(2)将服务器端证书vsftpd.crt拷贝到客户端,然后编辑/etc/lftp.conf 配置文件,在文件末尾添加:
set ssl:ca-file “/etc/ssl/certs/vsftpd.crt”
(3)使用如下命令登录(示例中10021为端口号,vusera为用户名):
lftp -p 10021 vusera@192.168.195.177
提示输入密码,输入vusera的密码即可登录。
