【问题标题】:FTPS (FTP-SSL) in Qt 4.6Qt 4.6 中的 FTPS (FTP-SSL)
【发布时间】:2010-12-21 12:45:01
【问题描述】:

我试图让 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
  • root 登录时强制使用 SSL

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

感谢您的帮助!

【问题讨论】:

  • 你检查过 QNetworkAccessManager 吗?
  • @frank 非常感谢您的提示,坦率,请参阅我更新的问题
  • 您在 FileZilla 中的 SSL/TLS 配置是什么?
  • @piotr 更新了我的答案

标签: qt ssl qt4 ftp openssl


【解决方案1】:

不幸的是,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 协议。

【讨论】:

  • 你最好告诉 thiago 为 Qt 4.8 实现这个;)
  • 非常感谢!你的回答绝对证实了我到目前为止所发现的。我不太喜欢重新实现 FTP 的想法,所以我们将制作 QFtp 或 QNetworkAccessManager SSL-Ready 或购买 chilkats FTP2 库。有人应该在 Qt 手册中提到 FTPS 问题 - QNetworkAccessManagers FTP-和 SSL-support 意味着 FTPS 支持。
猜你喜欢
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多