Когда доступен посредник SOCKS, FTPSClient из Commons Net может использовать унаследованный интерфейс socket-прокси. Оставьте сервер FTPS пунктом назначения соединения:

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

Это запускает явное соединение FTPS. Приложение по-прежнему отвечает за вход, согласование защиты данных, обработку передачи и отключение. Настройка null trust manager выбирает стандартные trust manager-ы JVM вместо проверки сертификата только по дате в Commons Net. Используйте предусмотренное хранилище доверия и имя хоста сертификата сервера.

При пассивных передачах текущая реализация FTPSClient создаёт свой сокет данных тоже через настроенный прокси, а затем добавляет уровень TLS. После входа используйте пассивный режим и согласуйте требуемый защищённый канал данных через обычный API FTPS. Успешное управляющее соединение не завершает эту работу; пассивное соединение данных остаётся отдельным путём.

Код предполагает службу SOCKS без дополнительной учётной записи. Поддержка аутентификации требует отдельного рассмотрения для выбранной среды выполнения Java и развёртывания.

Это не интерфейс HTTP CONNECT из FTPHTTPClient. Тот собрат обрабатывает обычный FTP через HTTP-туннель; смена его порта не добавляет FTPS. Если сеть разрешает только HTTP-прокси, выберите реализацию FTPS или поддерживаемую адаптацию с поддержкой CONNECT и на управляющем, и на канале данных.

Сохраняйте настройку прокси на протяжении всего жизненного цикла клиента и пересматривайте её перед повторным подключением используемого экземпляра: отключение FTPS сбрасывает фабрики сокетов. Не заменяйте проверки сертификатов менеджером полного доверия, чтобы маршрут казался успешным.

Похожие статьи