Проблема с SFTP-соединением

Я получаю исключение при попытке подключиться к SFTP-серверу. Я считаю, что это небезопасный сервер, но соединение с FTP также не удалось. Я подтвердил администратору, что сервер на самом деле защищен и должен использовать SFTP. Код прекрасно работает на моей локальной машине, как отдельная Java-программа, но не при запуске на коммерческом сервере Websphere на моей локальной машине.

Код:

FTPSClient client = new FTPSClient();
//FTPClient  client = new FTPClient();
//client.setKeyManager(km);
System.setProperty("javax.net.debug", "all");
//client.setSocketFactory(SSLSocketFactory.getDefault()); 
client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
client.setTrustManager(ACCEPT_ALL);
client.enterLocalPassiveMode();
client.setWantClientAuth(false);
client.setNeedClientAuth(false);
//client.setEnabledCipherSuites(null);
System.out.println("using 990'");
client.connect("obuftp.sears.com",21);

Исключение (при работе внутри WCS env)

SystemOut     O   220-| Welcome to obuftp401p FTP over SSL (FTPS) Server |
220-| We allow TLS connections on ports 21 and 990.    |
220-| If you see "503 Login with USER first." use SSL. |
220 

SystemOut     O   AUTH TLS

SystemOut     O   234 Proceed with negotiation.

SystemErr     R   javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
SystemErr     R      at com.ibm.jsse2.b.c(b.java:169)
SystemErr     R      at com.ibm.jsse2.b.a(b.java:228)
SystemErr     R      at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:242)
SystemErr     R      at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:437)
SystemErr     R      at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:142)
SystemErr     R      at com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.java:686)
SystemErr     R      at org.apache.commons.net.ftp.FTPSClient.sslNegotiation(FTPSClient.java:240)
SystemErr     R      at org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:171)

1 ответ

Обратите внимание, что безопасный FTP - вещь довольно неоднозначная.

  1. SFTP является частью протокола SSH
  2. FTPS является настоящим "безопасным FTP" как расширение протокола FTP

Сейчас существует 2 вида FTPS: неявный (FTPS) и явный (FTP/ES).

  • FTPS зашифрован по умолчанию и обычно работает на порту 990.
  • Соединение FTP/ES начинается как обычный FTP (порт по умолчанию 21) и явно включается командой FTP "START TLS" или "START SSL".

Есть много проблем, возникающих в результате путаницы между всеми этими протоколами. Я предполагаю, что это также имеет место здесь - вы, вероятно, отправляете "AUTH TLS" на сервер, который ожидает данные SSL, или вы отправляете данные SSL на сервер, который ожидает "AUTH TLS".

Может быть client.connect("obuftp.sears.com",990); будет просто отлично...

Вы можете прочитать больше на https://en.wikipedia.org/wiki/FTPS

Другие вопросы по тегам