Подключиться к FTPS через прокси

Первоначальная проблема, с которой мы столкнулись, заключалась в том, что обычная загрузка FTP начала давать сбой из-за ненадежного сертификата сервера. Это побудило нас задаться вопросом, был ли сертификат обновлен без уведомления контрагента, поэтому мы хотели загрузить текущий сертификат и сравнить его с тем, который у нас есть в нашем хранилище ключей.

Это кажется более сложной проблемой, чем мы ожидали. Обычные подозреваемые (firefox, filezilla, ...) не справились с задачей подключения к FTP-серверу через FTP-прокси, поэтому из любопытства я начал играть с более низкоуровневым подходом Java. Я не могу на всю жизнь заставить его работать.

Первая (слишком упрощенная) попытка Java:

    // create proxy connection
    SocketFactory plainFactory = SocketFactory.getDefault();
    Socket proxy = plainFactory.createSocket(proxyServer, proxyPort);

    // create ssl connection on top of it?
    SSLSocketFactory sslFactory = getSocketFactory();
    SSLSocket socket = (SSLSocket) sslFactory.createSocket(proxy, server, port, true);

Такой подход явно не работает.

Затем я начал экспериментировать с ftp4j (http://www.sauronsoftware.it/projects/ftp4j/), похоже, у него чистая и доступная кодовая база:

    FTPClient client = new FTPClient();
    client.setConnector(new FTPProxyConnector(proxyHost, proxyPort));
    client.getConnector().setConnectionTimeout(0);
    client.getConnector().setReadTimeout(0);
    client.setSSLSocketFactory(getSocketFactory());
    // also tried SECURITY_FTPS
    client.setSecurity(FTPClient.SECURITY_FTPES);
    client.connect(server, port);

Это выводит:

REPLY: 220 Blue Coat FTP Service
SEND: USER anonymous
REPLY: 530-User Access denied.
REPLY: 530-
REPLY: 530-Usage: USER username@hostname
REPLY: 331        PASS userpassword
Exception in thread "main" java.io.IOException: Invalid proxy response

Прокси-сервер имеет дополнительную аутентификацию, и на наших серверах разработки мы обычно используем «user@host» без аутентификации прокси. Таким образом, я предполагаю, что имя пользователя, имя хоста и пароль принадлежат удаленному серверу?

Итак, я попытался добавить удаленные параметры, это не работает:

REPLY: 220 Blue Coat FTP Service
SEND: USER [email protected]
Exception in thread "main" java.io.IOException: FTPConnection closed

Добавление прокси-пользователя в соответствии с форматом bluecoat также не работает:

USER %u@%h %s
PASS %p
ACCT %w

Любая помощь с любой из этих двух проблем будет приветствоваться:

  • как получить сертификат сервера с ftps-сервера через ftp-прокси
  • как подключиться к ftps-серверу через ftp-прокси в java

person nablex    schedule 10.08.2012    source источник


Ответы (1)


Возможно, вы захотите попробовать общие библиотеки Apache Net.

Вот похожий поток, который использует этот Библиотека Net Commons

Net commons также имеет полнофункциональный FTP-клиент Пример, чтобы вы могли протестировать с чем-то, что вы знаете, работает.

person Mike    schedule 10.08.2012