FluentFTP выдает «System.IO.IOException: Ошибка аутентификации» при попытке вывести список файлов на ftps-сервере - PullRequest
0 голосов
/ 14 ноября 2018

Описание При подключении к серверу FileZilla FTPS с помощью FluentFTP мы получаем System.IO.IOException: Authentication failed because the remote party has closed the transport stream. при попытке вывести список файлов.

Мы можем установить начальное соединение, мы можем войти,но когда FluentFTP пытается установить соединение для передачи данных через EPSV, он выдает ошибку за этим исключением.

Наше исследование, похоже, покажет, что возобновление TLS не удалось.Серверы FTPS настаивают на том, чтобы соединение для передачи данных возобновляло сеанс TLS из управляющего соединения, и это, похоже, дает сбой.Любопытно, что это происходит только на dotnetcore в Linux или WSL.Все отлично работает на dotnetcore в Windows.

Версии : DotNetCore 2.1.5 FluentFTP 19.2.2

ОС Ubuntu 18.04 / Windows 10 WSL Ubuntu18.04

Демонстрационный код

public async Task We_should_be_able_to_connect_and_list_files()
{
    var client = new FtpClient("myhost", "user", "pass");
    client.EncryptionMode = FtpEncryptionMode.Explicit;
    client.SslProtocols = SslProtocols.Tls;
    client.ValidateCertificate += (c, e) => { e.Accept = true; };

    await client.ConnectAsync();
    var items = await client.GetListingAsync("/");

    Assert.NotEmpty(items);
}

Исключение

System.IO.IOException : Authentication failed because the remote party has closed the transport stream.
   at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest asyncRequest)
--- End of stack trace from previous location where exception was thrown ---
   at System.Net.Security.SslState.ThrowIfExceptional()
   at System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)
   at System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult)
   at System.Net.Security.SslStream.<>c.<AuthenticateAsClientAsync>b__46_2(IAsyncResult iar)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at FluentFTP.FtpSocketStream.ActivateEncryptionAsync(String targethost, X509CertificateCollection clientCerts, SslProtocols sslProtocols)
   at FluentFTP.FtpClient.OpenPassiveDataStreamAsync(FtpDataConnectionType type, String command, Int64 restart)
   at FluentFTP.FtpClient.OpenDataStreamAsync(String command, Int64 restart)
   at FluentFTP.FtpClient.GetListingAsync(String path, FtpListOption options)

FluentFTP Log

...

# GetListingAsync("/", Auto)
Command:  TYPE I
Response: 200 Type set to I

# OpenPassiveDataStreamAsync(AutoPassive, "MLSD /", 0)
Command:  EPSV
Response: 229 Entering Extended Passive Mode (|||50992|)
Status:   Connecting to ***:50992
Command:  MLSD /
Response: 150 Opening data channel for directory listing of "/"
Status:   Disposing FtpSocketStream...

Что мы делаем не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...