FTPS (FTP-SSL) в Qt 4.6 - PullRequest
       45

FTPS (FTP-SSL) в Qt 4.6

5 голосов
/ 21 декабря 2010

Я пытаюсь заставить FTP-SSL работать с Qt 4.6.3. Я уже скомпилировал Qt с поддержкой OpenSSL. Есть ли хорошие ресурсы о FTPS с Qt? Кажется, что 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 через SSL / TLS
  • Явный FTP через TLS включен
  • Обычный незашифрованный FTP запрещен
  • SSL принудительно для входа в систему root

Я бы, по крайней мере, ожидал каких-то sslErrors сигналов, так как пользователь / pw в порядке и SSL не работает, но я получаю только authenticationRequired сигналов.

Спасибо за вашу помощь!

1 Ответ

4 голосов
/ 27 декабря 2010

К сожалению, в Qt нет готового решения для FTPS.

  • QFtp реализует много команд ftp но не поддерживает шифрование.
  • QNetworkAccessManager поддерживает только основные функции ftp (файл загрузить / загрузить) и не поддерживает шифрование в случае ftp тоже. Это Стоит отметить, что это поддерживает шифрование для HTTP, который является Протокол, для которого он в основном предназначен.
  • QSslSocket реализует SSL, но нет определенный протокол, такой как FTP или HTTP

Принимая во внимание вышеприведенную информацию, приходит мысль объединить QFtp с QSslSocket для получения зашифрованного FTP. Проблема в том, что QFtp класс не имеет метода, который позволил бы QFtp использовать предоставленный пользователем сокет. Для сравнения QHttp имеет такой метод - int QHttp::setSocket(QTcpSocket * socket)

Итог; По словам Тьяго Макиейры (дизайнера QNetworkAccessManager), путь заключается в реализации протокола FTP с использованием QSslSocket.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...