五、加密FTP服务器与客户端连接
传统的网络服务程序FTP在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,嗅探器非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间服务器”(server-in-the-middle)这种方式的攻击。所谓“中间服务器”的攻击方式,就是“中间服务器”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间服务器”转手后做了手脚之后,就会出现很严重的问题。虽然近年来出现了很多种ftp的替代服务,例如ssh加密通道的sftp/scp,或使用IPSEC协议的VPN通道等等,但是在大多数情况下,ftp的通用性和易用性使得它在很长一段时间内必然无法被完全取代。所以如同其他一系列古董服务(例如SMTP/HTTP)一样,近年来也出现了一些不需要对ftp协议自身做完全更改的协议扩展模块,能够良好的完成兼容性和功能扩展。ftp SSL/TLS Extension就是其中一种方式。
SSL/TLS协议,SSL(Secure SocketLayer)最早是netscape公司设计的用于HTTP协议加密的安全传输协议,SSL工作于TCP协议的传输层(TCP层)和应用程序之间。作为一个中间层,应用程序只要采用SSL提供的一套SSL套接字API来替换标准的Socket套接字,就可以把程序转换为SSL化的安全网络程序,在传输过程中将由SSL协议实现数据机密性和完整性的保证。SSL协议的当前版本为3.0,当SSL取得大规模成功后,IETF(www.ietf.org)将SSL作了标准化,规范为RFC2246,并将其称为TLS(TransportLayerSecurity)。从技术上讲,TLS1.0与SSL3.0的差别非常微小,SSL由于其历史应用的原因在当前的商业应用程序之中使用得更多一些。
下面配置支持TLS的ProFTPD服务器。
1.首先配置文件
# ./configure --with-modules=mod_tls \
--with-modules=mod_sql:mod_sql_mysql \
--with-includes=/usr/local/include \
--with-libraries=/usr/local/lib/mysql
# make;# make install
2. 接下来制作凭证
# mkdir /etc/ssl/certs
# mkdir /etc/ssl/private
# chmod og-rwx /etc/ssl/private
# mkdir /etc/ssl/crl
# mkdir /etc/ssl/newcerts
修改 /etc/ssl/openssl.cnf
把 dir = ./demoCA 改成 dir = /etc/ssl
3.制作最高层认证中心 (Root CA)
Private Key ( Public Key )
# openssl genrsa -des3 -out /etc/ssl/private/myrootca.key 2048
# chmod og-rwx /etc/ssl/private/myrootca.key
填写凭证申请书 (然后按照问题回答即可)
#openssl req -new -key /etc/ssl/private/myrootca.key -out /tmp/myrootca.req
签发凭证
# openssl x509 -req -days 7305 -sha1 -extfile /etc/ssl/openssl.cnf
-extensions v3_ca -signkey /etc/ssl/private/myrootca.key -in /tmp/myrootca.req -out /etc/ssl/certs/myrootca.crt
# rm -f /tmp/myrootca.req
制作服务器用的凭证
Private Key ( Public Key )
# openssl genrsa -out /etc/ssl/private/myhost.key 2048
# chmod og-rwx /etc/ssl/private/myhost.key
填写凭证申请书
# openssl req -new -key /etc/ssl/private/myhost.key -out /tmp/myhost.req
4.用最高层认证中心签发凭证
# openssl x509 -req -days 3650 -sha1 -extfile /etc/ssl/openssl.cnf
-extensions v3_req -CA /etc/ssl/certs/myrootca.crt -CAkey /etc/ssl/private/myrootca.key -CAserial /etc/ssl/myrootca.srl -CAcreateserial -in /tmp/myhost.req -out /etc/ssl/certs/myhost.crt
# rm -f /tmp/myhost.req
5. 接下来设定/usr/local/etc/proftpd.conf,主要是在最后加上以下有关TLS的设定
< IfModule mod_tls.c >
TLSEngine on
TLSLog /var/log/tls.log
TLSProtocol SSLv23
TLSOptions NoCertRequest
TLSRequired On
TLSRSACertificateFile /etc/ssl/certs/myhost.crt
TLSRSACertificateKeyFile /etc/ssl/private/myhost.key
TLSCACertificateFile /etc/ssl/certs/myrootca.crt
TLSVerifyClient On
< /IfModule >
使用支持TSL技术的客户端连接FTP服务器。到此为止服务器端安装设置完毕,登陆服务器的客户端使用FlashFXP , FlashFXP由于安装使用的文章比较多,所以本文就不详细介绍了。其他支持TLS连接的客户端很多windows环境下的FileZilla、UltraFXP,Linux环境下的C-kermit 8.0(http://www.columbia.edu/kermit/ck80.html ),fireftp(firefox浏览器的ftp插件下载链接:http://releases.mozilla.org/pub/mozilla.org/extensions/fireftp/fireftp-0.94.2-fx.xpi )和lftp(http://lftp.yar.ru/ )。
lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。llftp的界面非常想一个shell: 有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。
命令行语法
lftp [OPTS] <site>
`lftp'' 是在 rc 文件执行后 lftp 执行的第一个命令
-f <file> 执行文件中的命令后退出
-c <cmd> 执行命令后退出
--help 显示帮助信息后退出
--version 显示 lftp 版本后退出
其他的选项同 `open'' 命令
-e <cmd> 在选择后执行命令
-u <user>[,<pass>] 使用指定的用户名/口令进行验证
-p <port> 连接指定的端口
<site> 主机名, URL 或书签的名字
如果在命令行中输入的站点名称,lftp将直接登录站点,如果在命令行不输入站点名称,则必须在进入到lftp界面后用open命令打开 。
更多可以支持TSL的FTP客户端查看列表:http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html
这样我们就成功的为FTP增添了TSL加密连接.而一个比较完整安全的FTP站点也配置完成了 。