一、FTP作用与工作原理

1、作用:

用户可以通过FTP连接到远端一个运行着FTP服务的计算机上上传下载文件.

2、工作原理:

支持FTP协议的服务器都可以理解为FTP服务器.FTP协议有两种连接方式,一种是控制连接,另一种是数据连接.而在数据连接的时候也有两种工作模式,即主动模式与被动模式.


                                    主动模式图示:

基于SSL的FTP文件安全传输-------FTPS_ftp+ssl

工作原理:

a、客户机通过自己的Y端口(大于1024)

向服务器发起请求 连接服务器的21端口

b、服务器的21端口对客户机做出回应

c、服务器打开20端口连接客户机的Y+1端口

d、客户机响应服务器,数据开始传输.


                                       被动模式图示:

基于SSL的FTP文件安全传输-------FTPS_ftps_02

工作原理:

a、客户机通过自己的Y端口(大于1024)

向服务器发起请求,连接服务器的21端口

b、服务器的21端口响应客户机

c、服务器打开一个大于1024的随机端口连接客户机的Y+1端口.

d、服务器响应客户机 数据传输开始.


环境:vsftpd-2.2.2    CentOS-6.5-i386   FlashFXP4_1548_Setup

二、利用Centos自带的openssl实现CA

在实现FTPS之前呢,可以先测试一下ftp的安全性.ftp是明文传输的,在用户名密码在传输的过程中肯定不安全的。另开启一台主机并安装wireshark工具进行抓包.

基于SSL的FTP文件安全传输-------FTPS_ftp+ssl_03

基于SSL的FTP文件安全传输-------FTPS_SSL_04

这就是要实现FTPS的直接原因.

1、挂在光驱并安装vsftpd、openssl

mkdir  /media/cdrom        #创建挂在点
mount /dev/cdrom  /media/cdrom    #挂在光盘
yum --disablerepo=\* --enablerepo=c6-media install vsftpd #安装ftp
yum --disablerepo=\* --enablerepo=c6-media install openssl #安装openssl

2、修改openssl的配置文件

修改默认匹配策略.

# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
####################################################################

注:

       快速修改指令:85,87 s/match/optional

修改默认国家省市.

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = CH        #默认国家
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = HN        #默认省份
localityName                    = Locality Name (eg, city)
localityName_default    = ZZ            #默认城市
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Default Company Ltd
# we can do this but it is not needed normally :-)
#1.organizationName             = Second Organization Name (eg,
company)
#1.organizationName_default     = World Wide Web Pty Ltd


3、切换到/etc/pki/CA/目录下

touch index.txt
touch serial
echo "01" >serial
openssl genrsa  1024 >private/cakey.pem  #产生私钥
chmod 600 cakey.pem     #更改权限,增加安全性
openssl req  -new -key private/cakey.pem   -x509 -out cacert.pem #颁发CA证书

基于SSL的FTP文件安全传输-------FTPS_安全传输f_05


4、vsftpd的配置

mkdir -pv  /etc/vsftpd/certs    #创建放置私钥、请求文件、证书的目录
cd /etc/vsftpd/certs
openssl genrsa  1024 >vsftpd.key   #产生FTP私钥
chmod 600 vaftpd.pem    #更改权限
openssl req -new -key vsftpd.key -out  vsftpd.req #产生证书请求文件
openssl ca -in vsftpd.req -out vsftpd.cert  #请求CA颁发证书

修改配置文件.

在配置文件的最后加上下列配置:

force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_enable=YES
ssl_sslv2=YES
ssl_sslv3=YES
ssl_tlsv1=YES
rsa_cert_file=/etc/vsftpd/certs/vsftpd.cert
rsa_private_key_file=/etc/vsftpd/certs/vsftpd.key


5、OK.配置完成之后启动服务进行测试.注意观察抓包内容,全部变成密文的了!而不像之前的账号密码都可以看得一清二楚.

基于SSL的FTP文件安全传输-------FTPS_安全传输f_06

基于SSL的FTP文件安全传输-------FTPS_ftps_07