ftps
正如我们所说的ftp明文传输,只要有人监听网络,抓取网络传输报文就可以很轻松的得到ftp明文的用户名和密码,为了安全,这里我们和http一样的原理实现ftps。
自建CA
自建ca还是和ftp在同一台服务器
1 | ~]# (umask 077;openssl genrsa -out /etc/pki/CA/privite/cakey.pem 4096) |
2 | ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 |
3 | ~]# mkdir /etc/pki/CA/{newcerts,certs,crl} |
4 | ~]# touch /etc/pki/CA/{serial,index.txt} |
5 | ~]# echo 01 > /etc/pki/CA/serial |
签署证书
1 | ~]# cd /etc/vsftpd/ |
2 | ~]# mkdir ssl |
3 | ~]# cd ssl |
4 | ~]# (umask 077;openssl genrsa -out ftp.key 2048) |
5 | ~]# openssl req -new -key ftp.key -out ftp.csr -days 365 |
6 | ~]# openssl ca -in ftp.csr -out ftp.crt -days 365 |
修改配置
1 | cat /etc/vsftpd/vftpd.conf |
2 | ssl_enable=YES |
3 | ssl_tlsv1=YES |
4 | ssl_sslv2=YES |
5 | ssl_sslv3=YES |
6 | allow_anon_ssl=NO |
7 | force_local_data_ssl=YES |
8 | force_local_logins_ssl=YES |
9 | rsa_cert_file=/etc/vsftpd/ssl/ftp.crt |
10 | rsa_private_key_file=/etc/vsftpd/ssl/ftp.key |
测试
local 用户登录
1 | ~]# ftp 10.211.55.35 |
2 | Connected to 10.211.55.35 (10.211.55.35). |
3 | 220 (vsFTPd 2.2.2) |
4 | Name (10.211.55.35:root): jusene |
5 | 530 Non-anonymous sessions must use encryption. |
6 | Login failed. |
7 | ftp> ^C |
8 | ftp> 221 Goodbye. |
匿名用户登录,我们明确指出anonymous不需要ssl加密会话
1 | ~]# ftp 10.211.55.35 |
2 | Connected to 10.211.55.35 (10.211.55.35). |
3 | 220 (vsFTPd 2.2.2) |
4 | Name (10.211.55.35:root): anonymous |
5 | 331 Please specify the password. |
6 | Password: |
7 | 230 Login successful. |
8 | Remote system type is UNIX. |
9 | Using binary mode to transfer files. |
10 | ftp> ls |
11 | 227 Entering Passive Mode (10,211,55,35,189,49). |
12 | 150 Here comes the directory listing. |
13 | drwxr-xr-x 2 0 0 4096 May 11 2016 pub |
14 | 226 Directory send OK. |
需要测试ssl加密登录,我们可以在windows中下载第三方ftp登录工具
ssl配置选项简单说明
- ssl_enable:开启ssl会话功能,ssl的配置都依赖这个功能
- allow_anon_ssl:允许匿名用户使用ssl会话
- force_anon_data_ssl:强制匿名用户使用ssl加密数据传输
- force_anon_logins_ssl:强制匿名用户使用ssl登录
- force_local_data_ssl:强制local用户使用ssl加密数据传输
- force_local_logins_ssl:强制local用户使用ssl登录
- ssl_sslv2 ssl_sslv3 ssl_tlsv1 ssl_tlsv1_1 ssl_tlsv1_2 支持的加密版本