关于vsftpd ssl的一些配置

  真是懒啊,好久没有写了,必须鞭策自己了。就拿折腾了我几天的vsftpd来下手吧。在vxworks上实现向ftp服务器通过ssl加密信道上传其实很简单么,本来也很简单的移植了quftp(linux下的开源ftp程序,使用版本1.0.7)到vxworks,也很简单的实现了功能,目标ftp服务端程序为serv-u。可是呢,前两天搞了台机子装了个ubuntu,在上面架了服务器,装了个vsftpd,准备以后就用这个测试吧。结果问题就来了。废话不多说,主要三个问题,下面一一道来,希望遇到同样问题的同学可以顺利解决。

  1.ssl握手失败

    a.现象:调用send_client_hello(ssl);函数后,进行接受服务器返回数据ret = basic_read(ssl, NULL,TIMEOUT)。结果返回值为-40,查了好久也不知道-40是个什么错误,可能我没找到,希望有这方面资料的同学可以告诉我下。由于是vxworks不能听包,只能去听服务器上的包。(PS:本来这套代码是先在win32上实现移植了的,结果由于自己比较懒的缘故,既然已经挪到了Vxworks就懒得再回到windows上调试了。。懒是需要付出代价的,慢慢printf吧你。。。)。好了,在服务器上听到包让我看到了希望。

SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher

 这里又要说自己的方法笨了,返回错误数据,怎么程序里没有显示呢,还要去服务器端听包。需要改进需要改进。回到正题吧,看到这就明白了是服务器端和客户端没有共同的cipher suite。相关文献可以看下openssl官网关于cipher的介绍http://www.openssl.org/docs/apps/ciphers.html。也可以在安装了openssl的linux下输入

man ciphers

 

截个部分屏吧。

    b.解决方案:

然后呢查了下自己程序支持的cipher suite。最后选择了AES128_SHA这个suite.之后要在vsftpd.conf中加入这个参数

ssl_ciphers=AES128-SHA

 这个是我在vsftpd的官网里所有参数的介绍中找到的。地址:http://vsftpd.beasts.org/vsftpd_conf.html

http://vsftpd.beasts.org  这个地址貌似被墙了,求证。。需要fg的可以找我要哦。

 

  2.需要客户端证书

    a.现象:这个没有具体到某个函数返回的错误值,反正是服务器返回的错误值为-10。听包结果为返回错误:

SSL routines:SSL3_GET_CERT_VERIFY:no client cert received

     b.解决方案:

这个还是比较好解决的,在vsftpd.conf的参数中找到了3个关于证书认证的选项:require_cert,validate_cert和ssl_request_cert。可以通过字面意思理解,前两个默认是no,最后一个是yes,所以显而易见的在vsftpd.conf中加入一行

ssl_request_cert=no

   3.pasv模式下得ssl连接的建立

    a.现象:我先说下,我这个程序pasv模式传输数据的过程。首先,在服务器返回pasv IP和端口后建立tcp连接;接着,在tcp连接的基础上建立SSL连接;之后在控制流中输入STRO上传命令;最后,通过数据流进行传输。结果呢问题就出在tcp连接建立起来后,要建立ssl连接的时候。服务器返回vsf_sysutil_recv_peek: no data

    b.解决方案:经过各种苦逼的查资料,看vsftpd源码和使用flashfxp和serv-u进行测试,得出结论我的顺序是错的。应该是先发STOR指令,再建立SSL连接。那为什么当时在serv-u上就OK呢?我觉着吧还是serv-u的处理机制要强一些,毕竟人家是收费软件好吧。。。

 

  总结

    虽然serv-u比较强大,处理机制比较强,但是不开源。虽然用着爽,不过还是从中学不到东西。最后还是想说一句,真是坚持到最后就能成功啊,这几个问题真是咬牙没放弃,就弄出来了。大家共勉吧。

 

posted @ 2011-10-31 22:21  LazyGunner  阅读(4385)  评论(0编辑  收藏  举报