Отправить файлы на сервер по протоколу FTPS - PullRequest
0 голосов
/ 12 июня 2019

Я создаю приложение, которое генерирует файл CSV и некоторые PDF-файлы.Я хочу, чтобы мое приложение отправляло эти файлы на сервер по протоколу FTPS.

Я использую библиотеку Apache Commons Net FTP, и она прекрасно работала, когда у меня было «Требовать возобновления сеанса TLS при подключении к данным при использовании PORT P»"снят, но поскольку я включил его, я не могу отправлять свои файлы.Появилась ошибка: 450 TLS session of data connection has not resumed or the session does not match the control connection.

После некоторых исследований на этом сайте я переопределил _prepareDataSocket_, чтобы преодолеть эту проблему, но теперь он просто создает пустые файлы на сервере.

Таммоя переопределенная функция:

@Override
    protected void _prepareDataSocket_(final Socket socket) throws IOException {
        if (socket instanceof SSLSocket) {
            // Control socket is SSL
            final SSLSession session = ((SSLSocket) _socket_).getSession();
            if (session.isValid()) {
                final SSLSessionContext context = session.getSessionContext();
                try {
                    final Field sessionHostPortCache = context.getClass().getDeclaredField("sessionHostPortCache");
                    sessionHostPortCache.setAccessible(true);
                    final Object cache = sessionHostPortCache.get(context);
                    final Method method = cache.getClass().getDeclaredMethod("put", Object.class, Object.class);
                    method.setAccessible(true);
                    method.invoke(cache, String
                            .format("%s:%s", socket.getInetAddress().getHostName(), String.valueOf(socket.getPort()))
                            .toLowerCase(Locale.ROOT), session);
                    method.invoke(cache, String
                            .format("%s:%s", socket.getInetAddress().getHostAddress(), String.valueOf(socket.getPort()))
                            .toLowerCase(Locale.ROOT), session);
                } catch (NoSuchFieldException e) {
                    throw new IOException(e);
                } catch (Exception e) {
                    throw new IOException(e);
                }
            } else {
                throw new IOException("Invalid SSL Session");
            }
        }
    }

и вот что FileZilla Server отображает: FileZilla Response

1 Ответ

0 голосов
/ 12 июня 2019

поможет ли этот ответ на другом форуме? http://forum.rebex.net/5673/450-error-connecting-to-ftp-requiring-explicit-ftp-over-tls

...