2010-12-21 11 views
5

Próbuję uzyskać FTP-SSL do pracy z Qt 4.6.3. Już skompilowałem Qt z obsługą OpenSSL. Czy są jakieś dobre zasoby dotyczące FTPS z Qt? Wygląda na to, że QFtp nie zapewnia obsługi SSL. Naprawdę nie chcę tworzyć własnej implementacji FTPS.FTPS (FTP-SSL) w Qt 4.6

// edit: Odkryłem QNetworkAccessManager (ty @ frank), ale nie mogę znaleźć żadnej użytecznej dokumentacji lub przykładów dla niego z SSL. To właśnie próbuję:

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); 

Ale FileZilla nie pozwala mi się połączyć. Konsola FZ mówi:

(000035) 21.12.2010 17:31:46 - (nie zalogowany) (127.0.0.1)> root

(000035) 21.12.2010 17:31: 46 - (nie zalogowany) (127.0.0.1)> wymagane 530 SSL

konfigurację

FileZilla:

  • FTP przez SSL/TLS włączone
  • Explicit FTP przez TLS włączona
  • Plain nieszyfrowane FTP zabronione
  • SSL zmuszony do korzeni zalogować

bym przynajmniej oczekiwać jakiegoś sslErrors sygnały od użytkownika/PW jest w porządku i SSL nie powiedzie się, ale ja dostaję tylko authenticationRequired sygnały .

Dzięki za pomoc!

+0

Czy sprawdziłeś QNetworkAccessManager? –

+0

@frank bardzo dziękuję za podpowiedź frank, zobacz moje zaktualizowane pytanie – atamanroman

+0

Jaka jest twoja konfiguracja SSL/TLS w FileZilla? –

Odpowiedz

4

Niestety, nie ma gotowego rozwiązania dla FTPS w Qt.

  • QFtp realizuje wiele komend ftp ale nie obsługuje szyfrowania.
  • QNetworkAccessManager obsługuje tylko podstawowe funkcje ftp (plik ) i nie obsługuje szyfrowania w przypadku ftp. Warto wspomnieć, że obsługuje on szyfrowanie dla protokołu HTTP, który jest głównie przeznaczony dla protokołu .
  • QSslSocket implementuje protokół SSL, ale nie konkretny protokół jak FTP lub HTTP

Biorąc powyższe informacje pod uwagę pomysł przychodzi do głowy mieszać QFtp z QSslSocket dostać szyfrowanego FTP. Problem polega na tym, że klasa QFtp nie ma metody, która pozwoliłaby na użycie gniazda użytkownika dostarczonego przez użytkownika. Według porównania QHttp ma taką metodę - int QHttp::setSocket(QTcpSocket * socket)

Dolna linia; zgodnie z Thiago Macieira (projektantem QNetworkAccessManager) sposobem na wdrożenie jest zaimplementowanie protokołu FTP za pomocą QSslSocket.

+0

Lepiej powiedz Thiago, aby zaimplementował to dla Qt 4.8;) – ismail

+0

Dziękuję bardzo! Twoja odpowiedź potwierdza absolutnie to, co odkryłem do tej pory. Nie podoba mi się pomysł ponownego zaimplementowania FTP, więc przygotujemy QFtp lub QNetworkAccessManager SSL-Ready lub kupimy bibliotekę FTP2 dla chilkatów. Ktoś powinien wspomnieć, że problem FTPS w podręcznikach Qt - QNetworkAccessManagers Obsługa FTP i SSL oznacza obsługę FTPS. – atamanroman