FTPS fallando, pero sólo en algunos comandos en algunas máquinas

Establezco un servidor FTP en IIS 10 en Server 2019. Tengo un certificado SSL y tengo conexiones con él trabajando en mi máquina de casa. El cliente que estoy usando es un programa que escribí en VB. NET, pero utiliza una biblioteca FTPS en C# (un puerto de FTPSClient de Alex a .NET 4.5). De todos modos, todo fue bueno hasta que probé el mismo programa en otra máquina, que estaba en mi trabajo. Tengo este error:

Incapaz de leer los datos de la conexión de transporte: El host remoto cerró por la fuerza una conexión existente.

Lo extraño fue, se conectó con éxito, y fue capaz de ejecutar ciertos comandos, pero una vez que intenté enumerar un dir o subir un archivo, es cuando recibo el error. He reducido el código que el error ocurre en:

 private SslStream CreateSSlStream(Stream s, bool leaveInnerStreamOpen)
    {
        SslStream sslStream = new SslStream(s, leaveInnerStreamOpen,
            new RemoteCertificateValidationCallback(ValidateServerCertificate),
            null //new LocalCertificateSelectionCallback(ValidateClientCertificate)
            );

        sslStream.ReadTimeout = timeout;
        sslStream.WriteTimeout = timeout;

        X509CertificateCollection clientCertColl = new X509CertificateCollection();
        if (sslClientCert != null)
            clientCertColl.Add(sslClientCert);

        sslStream.AuthenticateAsClient(hostname, clientCertColl, SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls, false);

        CheckSslAlgorithmsStrength(sslStream);

        return sslStream;
    }

Sucede en la llamada AuthenticateAsClient. Puedo pasar por esa misma línea justo antes cuando se conecta. Es sólo cuando intento ejecutar ciertos comandos que esa línea falla.

Luego lo intenté en otra máquina en una red diferente y ni siquiera llegó tan lejos. En su lugar, me equivoqué de que "la parte conectada no respondió etc/etc" y el error enumera la IP y el puerto del servidor (que es uno de los puertos que he reservado para FTP pasivo).

Pero puedo usar FTP pasivo simplemente bien en ambas máquinas si apago SSL.

Por lo tanto, FTP y FTPS trabajando bien en una máquina, FTP trabajando bien en otras dos máquinas, pero FTPS no se conecta a uno de esos, y FTPS conectando, pero no puede hacer mucho después de eso en el otro.

¿Qué podría estar causando esto y cómo empezaría a abordarlo? Mi primer pensamiento fue "firewall" (estaba en una red corporativa), pero si fuera el cortafuegos, no sería capaz de conectarse en absoluto, ¿verdad? Y tampoco sería capaz de conectar pasivo sin SSL, ya que los que usan los mismos puertos. ¿Podría ser un proxy? Estoy apuñalado en la oscuridad aquí, porque estoy perdido.

EDIT:

Instalé WinSCP y encendié la tala de verbose. Esto es lo que tengo. Tengo un error diferente en WinSCP que en mi cliente, pero está en el mismo paso (intentando hacer cualquier cosa en Passive: list/upload/etc).

. 2020-12-19 09:02:29.846 --------------------------------------------------------------------------
. 2020-12-19 09:02:29.846 Session name: [email protected] (Ad-Hoc site)
. 2020-12-19 09:02:29.846 Host name: mydomain.com (Port: 21)
. 2020-12-19 09:02:29.846 User name: myuser (Password: Yes, Key file: No, Passphrase: No)
. 2020-12-19 09:02:29.846 Transfer Protocol: FTP
. 2020-12-19 09:02:29.846 Ping type: Dummy, Ping interval: 30 sec; Timeout: 15 sec
. 2020-12-19 09:02:29.846 Disable Nagle: No
. 2020-12-19 09:02:29.846 Proxy: None
. 2020-12-19 09:02:29.846 Send buffer: 262144
. 2020-12-19 09:02:29.846 UTF: Auto
. 2020-12-19 09:02:29.846 FTPS: Explicit TLS/SSL [Client certificate: No]
. 2020-12-19 09:02:29.846 FTP: Passive: Yes [Force IP: Auto]; MLSD: Auto [List all: Auto]; HOST: Auto
. 2020-12-19 09:02:29.846 Session reuse: Yes
. 2020-12-19 09:02:29.846 TLS/SSL versions: TLSv1.0-TLSv1.2
. 2020-12-19 09:02:29.846 Local directory: default, Remote directory: home, Update: Yes, Cache: Yes
. 2020-12-19 09:02:29.846 Cache directory changes: Yes, Permanent: Yes
. 2020-12-19 09:02:29.846 Recycle bin: Delete to: No, Overwritten to: No, Bin path: 
. 2020-12-19 09:02:29.846 Timezone offset: 0h 0m
. 2020-12-19 09:02:29.846 --------------------------------------------------------------------------
. 2020-12-19 09:02:29.846 Session upkeep
. 2020-12-19 09:02:29.861 Connecting to mydomain.com ...
. 2020-12-19 09:02:29.861 TLS layer changed state from unconnected to connecting
. 2020-12-19 09:02:29.877 TLS layer changed state from connecting to connected
. 2020-12-19 09:02:29.877 Connected with mydomain.com, negotiating TLS connection...
< 2020-12-19 09:02:29.893 220 Microsoft FTP Service
> 2020-12-19 09:02:29.893 AUTH TLS
< 2020-12-19 09:02:29.924 234 AUTH command ok. Expecting TLS Negotiation.
. 2020-12-19 09:02:29.955 TLS connect: SSLv3/TLS write client hello
. 2020-12-19 09:02:29.955 TLS connect: SSLv3/TLS read server hello
. 2020-12-19 09:02:29.955 TLS connect: SSLv3/TLS read server certificate
. 2020-12-19 09:02:29.955 TLS connect: SSLv3/TLS read server key exchange
. 2020-12-19 09:02:29.955 TLS connect: SSLv3/TLS read server done
. 2020-12-19 09:02:29.970 TLS connect: SSLv3/TLS write client key exchange
. 2020-12-19 09:02:29.970 TLS connect: SSLv3/TLS write change cipher spec
. 2020-12-19 09:02:29.970 TLS connect: SSLv3/TLS write finished
. 2020-12-19 09:02:29.986 TLS connect: SSLv3/TLS write finished
. 2020-12-19 09:02:29.986 TLS connect: SSLv3/TLS read change cipher spec
. 2020-12-19 09:02:29.986 TLS connect: SSLv3/TLS read finished
. 2020-12-19 09:02:29.986 Verifying certificate for "" with fingerprint xxxxxxx and 20 failures
. 2020-12-19 09:02:29.986 Certificate common name "mydomain.com" matches hostname
. 2020-12-19 09:02:30.283 Certificate verified against Windows certificate store
. 2020-12-19 09:02:30.283 Using TLSv1.2, cipher TLSv1.2: xxxxxxx, 3072 bit RSA, xxxxxxxx TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
. 2020-12-19 09:02:30.314 TLS connection established. Waiting for welcome message...
> 2020-12-19 09:02:30.314 USER myuser
< 2020-12-19 09:02:30.314 331 Password required
> 2020-12-19 09:02:30.314 PASS ********
< 2020-12-19 09:02:30.345 230 User logged in.
> 2020-12-19 09:02:30.345 SYST
. 2020-12-19 09:02:30.361 The server is probably running Windows, assuming that directory listing timestamps are affected by DST.
< 2020-12-19 09:02:30.361 215 Windows_NT
> 2020-12-19 09:02:30.361 FEAT
< 2020-12-19 09:02:30.377 211-Extended features supported:
< 2020-12-19 09:02:30.377  LANG EN*
< 2020-12-19 09:02:30.377  UTF8
< 2020-12-19 09:02:30.377  AUTH TLS;TLS-C;SSL;TLS-P;
< 2020-12-19 09:02:30.377  PBSZ
< 2020-12-19 09:02:30.377  PROT C;P;
< 2020-12-19 09:02:30.377  CCC
< 2020-12-19 09:02:30.377  HOST
< 2020-12-19 09:02:30.377  SIZE
< 2020-12-19 09:02:30.377  MDTM
< 2020-12-19 09:02:30.377  REST STREAM
< 2020-12-19 09:02:30.377 211 END
> 2020-12-19 09:02:30.377 OPTS UTF8 ON
< 2020-12-19 09:02:30.408 200 OPTS UTF8 command successful - UTF8 encoding now ON.
> 2020-12-19 09:02:30.408 PBSZ 0
< 2020-12-19 09:02:30.424 200 PBSZ command successful.
> 2020-12-19 09:02:30.424 PROT P
< 2020-12-19 09:02:30.439 200 PROT command successful.
. 2020-12-19 09:02:30.439 Session upkeep
. 2020-12-19 09:02:30.502 Connected
. 2020-12-19 09:02:30.502 Got reply 1 to the command 1
. 2020-12-19 09:02:30.502 --------------------------------------------------------------------------
. 2020-12-19 09:02:30.502 Using FTP protocol.
. 2020-12-19 09:02:30.502 Doing startup conversation with host.
> 2020-12-19 09:02:30.517 PWD
< 2020-12-19 09:02:30.549 257 "/" is current directory.
. 2020-12-19 09:02:30.549 Got reply 1 to the command 16
. 2020-12-19 09:02:30.549 Getting current directory name.
. 2020-12-19 09:02:30.596 Retrieving directory listing...
> 2020-12-19 09:02:30.596 TYPE A
< 2020-12-19 09:02:30.611 200 Type set to A.
> 2020-12-19 09:02:30.611 PASV
< 2020-12-19 09:02:30.627 227 Entering Passive Mode (123,123,123,123,123,123).
> 2020-12-19 09:02:30.627 LIST -a
. 2020-12-19 09:02:30.627 Connecting to 123.123.123.123:123 ...
. 2020-12-19 09:02:30.658 Data connection opened
. 2020-12-19 09:02:30.658 Trying reuse main TLS session ID
< 2020-12-19 09:02:30.658 150 Opening ASCII mode data connection.
. 2020-12-19 09:02:30.658 TLS layer changed state from none to connected
. 2020-12-19 09:02:30.658 TLS layer changed state from connected to aborted
. 2020-12-19 09:02:30.658 Data connection closed
. 2020-12-19 09:02:30.658 
< 2020-12-19 09:02:30.674 550 The specified network name is no longer available. 
. 2020-12-19 09:02:30.674 Could not retrieve directory listing
. 2020-12-19 09:02:30.674 Got reply 4 to the command 2
. 2020-12-19 09:02:30.689 LIST with -a failed, will try pure LIST
. 2020-12-19 09:02:30.689 Retrieving directory listing...
> 2020-12-19 09:02:30.689 TYPE A
< 2020-12-19 09:02:30.705 200 Type set to A.
> 2020-12-19 09:02:30.705 PASV
< 2020-12-19 09:02:30.736 227 Entering Passive Mode (123,123,123,123,123,123).
> 2020-12-19 09:02:30.736 LIST
. 2020-12-19 09:02:30.736 Connecting to 123.123.123.123:123 ...
< 2020-12-19 09:02:30.752 150 Opening ASCII mode data connection.
. 2020-12-19 09:02:30.752 Data connection opened
. 2020-12-19 09:02:30.752 Trying reuse main TLS session ID
. 2020-12-19 09:02:30.752 TLS layer changed state from none to connected
. 2020-12-19 09:02:30.752 TLS layer changed state from connected to aborted
. 2020-12-19 09:02:30.752 Data connection closed
. 2020-12-19 09:02:30.752 
< 2020-12-19 09:02:30.783 550 The specified network name is no longer available. 
. 2020-12-19 09:02:30.783 Could not retrieve directory listing
. 2020-12-19 09:02:30.783 Got reply 4 to the command 2
* 2020-12-19 09:02:30.861 (ECommand) Error listing directory '/'.
* 2020-12-19 09:02:30.861 Could not retrieve directory listing
* 2020-12-19 09:02:30.861 The specified network name is no longer available. 
. 2020-12-19 09:04:30.099 Dummy directory read to keep session alive.
. 2020-12-19 09:04:30.099 Retrieving directory listing...
> 2020-12-19 09:04:30.099 TYPE A
< 2020-12-19 09:04:30.115 200 Type set to A.
> 2020-12-19 09:04:30.115 PASV
< 2020-12-19 09:04:30.146 227 Entering Passive Mode (123,123,123,123,123,123).
> 2020-12-19 09:04:30.146 LIST
. 2020-12-19 09:04:30.146 Connecting to 123.123.123.123:123 ...
. 2020-12-19 09:04:30.162 Data connection opened
. 2020-12-19 09:04:30.162 Trying reuse main TLS session ID
< 2020-12-19 09:04:30.162 150 Opening ASCII mode data connection.
. 2020-12-19 09:04:30.162 TLS layer changed state from none to connected
. 2020-12-19 09:04:30.162 TLS layer changed state from connected to aborted
. 2020-12-19 09:04:30.162 Data connection closed
. 2020-12-19 09:04:30.162 
< 2020-12-19 09:04:30.193 550 The specified network name is no longer available. 
. 2020-12-19 09:04:30.193 Could not retrieve directory listing
. 2020-12-19 09:04:30.193 Got reply 4 to the command 2

Pregunta hecha hace 3 años, 4 meses, 27 días - Por bitcraftsman


3 Respuestas:

  • Compruebe la configuración del protocolo TLS (véase abajo) en cada máquina. Pueden ser diferentes dependiendo de OS, versión, actualizaciones .NET, etc.

    O, posiblemente mejor, trate de establecer lo siguiente en su inicializador tipo clase (correr una vez):

    ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
    

    Este apéndice TLS1.2 y SSL3 a cualquier configuración que cada máquina tiene actualmente.

    Compruebe la configuración actual

    1. En la barra de búsqueda de Windows, escriba Opciones de Internet.

    2. Abra la aplicación y vaya a la Avances tab.

    3. En el Seguridad sección, verá su configuración SSL/TLS (dependiendo de OS; etc):

      Use SSL 3.0

      Use TLS 1.0

      Use TLS 1.1

      Use TLS 1.2

      Use TLS 1.3 (experimental)

    UPDATE

    Acabo de ver que tienes esta línea en tu código:

    sslStream.AuthenticateAsClient(hostname, clientCertColl, SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls, false);
    

    No estoy seguro, pero creo que deberías retirarte. SslProtocols.Tls11 y SslProtocols.Tls y posiblemente añadir SslProtocols.Ssl3 (si está disponible). Todavía probaría la punta anterior en cualquier caso y vería lo que pasa. Disculpas por perder eso.

    Respondida el Dec 18, 2020 a las 21:04 - por bugbusterx

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando con la conexión FTPS en algunas máquinas puede estar relacionado con problemas en la configuración de la red, en la configuración del servidor FTPS, o incluso en la biblioteca que estás utilizando en tu aplicación.

    A continuación, te proporcionaré algunas sugerencias para abordar y solucionar este problema:

    • Verificar configuración de firewall y proxy:
    - A pesar de que puedas conectarte en algunas máquinas pero no en otras, es importante verificar la configuración de firewall en las máquinas donde estás experimentando el problema. Asegúrate de que el firewall no esté bloqueando las conexiones FTPS.
    • También verifica si existe algún proxy en la red corporativa que podría estar interfiriendo con las conexiones FTPS.
    • Revisa la configuración del servidor FTPS:
    - Asegúrate de que el servidor FTPS esté configurado correctamente para aceptar conexiones FTPS y que esté utilizando el certificado SSL adecuado.
    • Verifica la configuración de los puertos pasivos en el servidor FTPS.
    • Revisar la biblioteca FTPS:
    - Si es posible, verifica si hay actualizaciones disponibles para la biblioteca FTPS que estás utilizando en tu aplicación. Es posible que alguna actualización solucione problemas de compatibilidad o errores en la biblioteca.
    • Prueba utilizando una biblioteca FTPS diferente para descartar posibles problemas con la biblioteca actual.
    • Revisar los mensajes de error:
    - Analiza los mensajes de error detallados, tanto en tu cliente como en la herramienta de terceros que utilizaste, como WinSCP. Estos mensajes pueden proporcionar pistas adicionales sobre las causas del problema.
    • Considera configuraciones de red específicas:
    - Ten en cuenta que en entornos corporativos, pueden existir configuraciones de red específicas que podrían estar causando problemas con las conexiones FTPS. Considera consultarlo con los administradores de la red.
    • Realiza pruebas adicionales:
    - Realiza pruebas adicionales, como usar otro cliente FTPS en las máquinas donde experimentas problemas, para ver si el problema persiste.
    • Utiliza herramientas de diagnóstico de red para identificar posibles problemas de conectividad.

    Espero que estas sugerencias te ayuden a abordar y solucionar el problema con tu conexión FTPS en algunas máquinas. Si el problema persiste, considera contactar al soporte técnico de la biblioteca FTPS que estás utilizando para obtener asistencia adicional.

    Respondida el Dec 19, 2020 a las 21:04 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Posibles causas:

    Firewall o proxy: Aunque los puertos pasivos se utilicen para la transferencia de datos, el firewall o proxy podría estar bloqueando el tráfico en esos puertos. Configuración del servidor FTP: El servidor FTP puede estar configurado incorrectamente para permitir conexiones pasivas en ciertos entornos. Configuración del cliente FTPS: El cliente FTPS puede tener una configuración incorrecta, como algoritmos de cifrado o versiones TLS no compatibles. Certificado SSL: El certificado SSL utilizado para la conexión FTPS puede no ser válido, estar caducado o no ser de confianza por el cliente. Falta de soporte de Windows 10: Windows 10 tiene soporte limitado para FTPS y es posible que experimente problemas con ciertas implementaciones.

    Pasos de solución de problemas:

    Comprobar el firewall o proxy:

    Desactiva temporalmente el firewall o proxy en la máquina que está experimentando problemas. Si el problema se resuelve, el firewall o proxy está bloqueando el tráfico y debes configurar una excepción.

    Comprobar la configuración del servidor FTP:

    Asegúrate de que el servidor FTP esté configurado para permitir conexiones pasivas en la red donde está experimentando problemas. Comprueba el registro del servidor FTP para ver si hay errores relacionados con conexiones pasivas.

    Comprobar la configuración del cliente FTPS:

    Revisa la configuración del cliente FTPS para asegurarte de que los algoritmos de cifrado y las versiones TLS sean compatibles con el servidor FTP. Intenta utilizar un cliente FTPS diferente para ver si se experimenta el mismo problema.

    Comprobar el certificado SSL:

    Comprueba que el certificado SSL utilizado para la conexión FTPS sea válido, no esté caducado y sea de confianza por el cliente. Intenta utilizar un certificado SSL diferente para ver si se resuelve el problema.

    Verificar el soporte de Windows 10:

    Asegúrate de que la versión de Windows 10 que estás utilizando tenga soporte para FTPS. Si es necesario, actualiza Windows 10 a la última versión.

    Otras comprobaciones:

    Intenta conectarte al servidor FTP mediante FTP simple (sin SSL) para descartar problemas relacionados con FTPS. Verifica que el puerto FTP (21) y los puertos pasivos (generalmente 1024-65535) estén abiertos en el firewall y el enrutador. Reinicia el servidor FTP y el cliente FTPS para descartar cualquier problema temporal.

    Respondida el Dec 19, 2020 a las 21:10 - por Gemini

    Votos positivos: 0 | Votos negativos: 0