Qt 4.6中的FTPS(FTP-SSL)

时间:2010-12-21 12:45:02

标签: qt ssl qt4 ftp openssl

我试图让FTP-SSL与Qt 4.6.3一起使用。我已经用OpenSSL支持编译了Qt。有关Qt的FTPS有什么好的资源吗?似乎QFtp不提供SSL支持。我真的不想创建自己的FTPS实现。

//编辑: 我发现了QNetworkAccessManager(ty @ frank),但我找不到任何有用的SSL文档或示例。多数民众赞成我正在尝试的事情:

QUrl url = QUrl("ftp://localhost/filex.txt");
url.setUserName("root");
url.setPassword("root");
QNetworkRequest request(url);
QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration());
request.setSslConfiguration(SslConfiguration);
manager->get(request);

但FileZilla不会让我联系。 FZ控制台说:

  

(000035)21.12.2010 17:31:46 - (未登录)(127.0.0.1)> USER root

     

(000035)21.12.2010 17:31:46 - (未登录)(127.0.0.1)>需要530 SSL

FileZilla配置:

  • 启用FTP over SSL / TLS支持
  • 启用TLS的显式FTP
  • 纯文本未加密的FTP不允许
  • SSL强制登录root

我至少会期待某种sslErrors信号,因为用户/ pw很好而SSL失败,但我只收到authenticationRequired信号。

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

不幸的是,在Qt中没有开箱即用的FTPS解决方案。

  • QFtp实现了许多ftp命令 但不支持加密。
  • QNetworkAccessManager仅支持 基本的ftp函数(文件 下载/上传)并不支持 在ftp的情况下加密。它的 值得一提的是它确实支持 HTTP加密,即 协议它主要是为。
  • 设计的
  • QSslSocket实现了SSL,但没有 特定协议,如FTP或HTTP

考虑到上述信息,我们会想到将QFtpQSslSocket混合以获得加密的FTP。问题是QFtp类没有允许QFtp使用用户提供的套接字的方法。通过比较QHttp有这样一种方法 - int QHttp::setSocket(QTcpSocket * socket)

底线;根据Thiago Macieira(QNetworkAccessManager的设计者)的说法,可以使用QSslSocket来实现FTP协议。