«Аутентификация не удалась, потому что удаленная сторона закрыла транспортный поток» при передаче на / с FTP-сервера через TLS / SSL с использованием FluentFTP - PullRequest
2 голосов
/ 06 апреля 2020

Я использовал FluentFTP lib im мой проект для работы с FTP через TLS, но здесь возникли некоторые проблемы.

Этот код работает нормально:

using (var conn = new FtpClient("adress", "user", "password"))
{
    conn.EncryptionMode = FtpEncryptionMode.Explicit;
    conn.ValidateAnyCertificate = true;
    conn.Connect();

    conn.CreateDirectory("/test/path/that/should/be/created", true);
}

И каталог был создан. Но в других примерах это не работает хорошо.

Первый пример (logfile - https://pastebin.com/jNyZ3fmD):

public static void DownloadFile()
{
    using (var conn = new FtpClient("adress", "user", "password"))
    {
        conn.EncryptionMode = FtpEncryptionMode.Explicit;
        conn.ValidateAnyCertificate = true;
            conn.Connect();

        conn.DownloadFile("localPath", "ftpPath", FtpLocalExists.Overwrite, FtpVerify.Retry);

    }
}

У меня ошибка:

«Ошибка при загрузке файла на сервер. Для получения дополнительной информации см. InnerException». IOException: аутентификация не удалась, потому что удаленная сторона закрыла транспортный поток

Попытка получить файл / dir-list с FTP с использованием приведенного ниже кода ничего не возвращает в консоли (logfile - https://pastebin.com/V8AiLs8k):

using (var conn = new FtpClient("adress", "user", "password"))
{
    //conn.Connect();
    conn.EncryptionMode = FtpEncryptionMode.Explicit;
    conn.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);
    conn.Connect();

    // get a recursive listing of the files & folders in a specific folder
    foreach (var item in conn.GetListing())
    {
        switch (item.Type)
        {

            case FtpFileSystemObjectType.Directory:

                Console.WriteLine("Directory!  " + item.FullName);
                Console.WriteLine("Modified date:  " + conn.GetModifiedTime(item.FullName));

                break;

            case FtpFileSystemObjectType.File:

                Console.WriteLine("File!  " + item.FullName);
                Console.WriteLine("File size:  " + conn.GetFileSize(item.FullName));
                Console.WriteLine("Modified date:  " + conn.GetModifiedTime(item.FullName));
                Console.WriteLine("Chmod:  " + conn.GetChmod(item.FullName));

                break;

            case FtpFileSystemObjectType.Link:
                break;
        }
        Console.WriteLine(item);
    }

}

Пользователь имеет право загружать, создавать и удалять файлы. Но я могу сделать каталог только на сервере.

1 Ответ

3 голосов
/ 07 апреля 2020

Кажется, это связано с отсутствием поддержки возобновления сеанса TLS в FluenFTP:
https://github.com/robinrodricks/FluentFTP/issues/347

Если вы подтвердите это с владельцем сервера, вам придется переключиться на другую библиотеку FTP. По аналогичному вопросу (для неявного TLS, когда вы используете явный TLS) см .:
Загрузка файла на неявный сервер FTPS в C# с повторным использованием сеанса TLS

Или попросить владельца отключить требование возобновления сеанса (хотя это плохо с точки зрения безопасности).

...