Gdy dostępny jest pośrednik SOCKS, FTPSClient z Commons Net może użyć odziedziczonego interfejsu socket proxy. Zachowaj serwer FTPS jako cel połączenia:

var client = new org.apache.commons.net.ftp.FTPSClient(false);
client.setProxy(new java.net.Proxy(
    java.net.Proxy.Type.SOCKS,
    new java.net.InetSocketAddress("proxy.example", 1080)));
client.setTrustManager(null);
client.setEndpointCheckingEnabled(true);
client.setConnectTimeout(10000);
client.connect("ftps.example", 21);

To rozpoczyna jawne połączenie FTPS. Aplikacja nadal odpowiada za logowanie, negocjację ochrony danych, obsługę transferu i rozłączenie. Ustawienie null trust manager wybiera domyślne trust managery JVM zamiast kontroli certyfikatu tylko po dacie w Commons Net. Użyj zamierzonego trust store i nazwy hosta z certyfikatu serwera.

Przy transferach pasywnych obecna implementacja FTPSClient tworzy także swój socket danych przez skonfigurowane proxy, a następnie dodaje warstwę TLS. Po zalogowaniu użyj trybu pasywnego i wynegocjuj wymagany chroniony kanał danych przez zwykłe API FTPS. Udane połączenie kontrolne nie wykonuje tej pracy; pasywne połączenie danych pozostaje osobną ścieżką.

Kod zakłada usługę SOCKS bez dodatkowego konta. Obsługa uwierzytelniania wymaga osobnego przeglądu dla wybranego środowiska Java i wdrożenia.

To nie jest interfejs HTTP CONNECT z FTPHTTPClient. Ten brat obsługuje zwykły FTP przez tunel HTTP; zmiana jego portu nie dodaje FTPS. Jeśli sieć pozwala tylko na proxy HTTP, wybierz implementację FTPS lub utrzymywaną adaptację obsługującą CONNECT na ścieżce kontrolnej i danych.

Zachowaj konfigurację proxy przez cały cykl życia klienta i przejrzyj ją przed ponownym połączeniem użytej instancji: rozłączenie FTPS resetuje fabryki socketów. Nie zastępuj kontroli certyfikatów menedżerem pełnego zaufania, aby trasa wyglądała na udaną.

Powiązane artykuły