miércoles, 30 de septiembre de 2020

Conectar vía FTPS desde Linux



Cómo conectar usando FTPS (FTP implícito sobre TLS) desde Linux.



Para realizar un intercambio de archivos entre un servidor de la empresa A y un servidor de la empresa B, tuve que hacer que la empresa A conectara con un servidor de la empresa B usando FTPS (FTP implícito sobre TLS) desde un servidor Linux.

Existen varias opciones (programas) para realizar una conexión FTPS desde Linux. Yo elegí lftp.

Para conectarnos vía FTPS desde Linux con lftp, el manual de lftp dice que debemos usar esta sintaxis:

HOST # lftp -p puerto -u usuario,password ftps://host

Pero si usamos esta sintaxis sin más, veremos el siguiente error:

HOST # lftp -p puerto -u usuario,password ftps://host lftp usuario@host:~> ls ls: Fatal error: Certificate verification: Not trusted

Como vemos, hay un certificado (TLS) en la conexión, y lftp no nos muestra ninguna opción para aceptarlo o guardarlo. Para eludir este error, podemos usar diferenets métodos.

Por un lado, podemos indicarle a lftp que no compruebe el certificado TLS durante la conexión:

HOST # lftp -p puerto -u usuario,password ftps://host -e "set ssl:verify-certificate false"

De esta forma, podremos conectar con el host sin problemas, pero la conexión no será cifrada punto a punto, es decir, no será segura. Usar esta opción sería lo mismo que hacer una conexión FTP plana.

Para conectar de forma segura con el host de destino, debemos importar el certificado ofrecido por el host remoto en nuestro host. Para hacer esto, debemos ver primero el certificado del host remoto.

Para ver el certificado del host al que nos queremos conectar podemos usar la utilidad openssl:

HOST # openssl s_client -showcerts -connect host:puerto CONNECTED(00000003) depth=0 CN = host, C = ES, ST = Spain, L = Madrid, O = Company, OU = Company, emailAddress = usuario@host.com verify error:num=18:self signed certificate verify return:1 depth=0 CN = host, C = ES, ST = Spain, L = Madrid, O = Company, OU = Company, emailAddress = usuario@host.com verify return:1 --- Certificate chain 0 s:/CN=host/C=ES/ST=Spain/L=Madrid/O=Company/OU=Company/emailAddress=usuario@host.com i:/CN=host/C=ES/ST=Spain/L=Madrid/O=Company/OU=Company/emailAddress=usuario@host.com -----BEGIN CERTIFICATE----- MIIDzDCCArSgAwIBAgIEF59rnf gUURFEfe7GDtunFR67HFd3GHJ45regTYu7jh8 OTQuMTQyLjIwMS4yNTQxCzAJBgNVBAYTAkVTMQ4wDAYDVQQIDAVTcGFpbjEPMA0G A1UEBwwGTWFkcmlkMRYwFAYDVQQKDA1BbWFkZXVzIFNwYWluMRYwFAYDVQQLDA1B bWFkZXVzIFNwYWluMS4wLAYJKoZIhvcNAQkBFh9hbHZhcm8uZ2FyY2lhYW5ndWxv QGFtYWRldXMuY29tMB4XDTIwMTIwMTE2MzQ0OVoXDTIxMTIwMTE2MzQ0OVowgacx 59mnermTxTujODDTHBdffs9342rTBHfghfg66GVdfsdfg)g534GDFGsfsDTGSFsf U3BhaW4xDzANBgNVBAcMBk1hZHJpZDEWMBQGA1UECgwNQW1hZGV1cyBTcGFpbjEW MBQGA1UECwwNQW1hZGV1cyBTcGFpbjEuMCwGCSqGSIb3DQEJARYfYWx2YXJvLmdh cmNpYWFuZ3Vsb0BhbWFkZXVzLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBAL++EGGUDSIWgJUkvgFXk1Zjo2RXrmToHF6zmBrkl052jFJQXj0sPSuX Lt+CJu8whg2xnnCNb6BwTCB7J+a9hDJJQR9m7uanzLn/1RlEcrcm0AyHA0tZ8UKw H589/QlWlfVwJLFqLMpYUowECh15jCh69TzHuSW6/mPc5Eo008LS20Cx28YKtfV5 g+qCv2BizkbEEiSCDe498H0+n/Kv1JeKFbJESJDaMNhuKxzQbfirNysgxTuf0rOR hhFTSLLsIa5NZMFXWESMpukU/0vYez0Mf3psOhNGEVKyQo1mbKT0eCDpLsZaPRzX IG/m1duwIyTMjN4c+hiXYlda1t7JLUsCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA l4vJUVhgOPzqgr516r5QDynF8o9I8xgJZj5ZA/Jma8lUoYO3+g5lTv8NM2JqeRdP fKhdUK3t7MofPh3YKHg/NubUz6vtJi6vpzfqkAjUY3z7z2RzITbmAtTqgnqWPzK9 pfdGsT99acNeUoYzAnCRN46sftQ9dS4mCUZdIP+vUObXBGJhxB6LOxwYs1EeGEPa 8p6C/rErdHNVu7nO+CEOkXiN2QnBYacYdV2q90oS/eZ5XEVCet4mjMltcKwX1mCL or8fnfvsdgDH$/rwegdrh/$GDHFGJSG575757RHRTRGdfgdfg4d4h3f33hf33h4h DaszVAQqxS687mfneI5vgQw== -----END CERTIFICATE----- --- Server certificate subject=/CN=host/C=ES/ST=Spain/L=Madrid/O=Company/OU=Company/emailAddress=usuario@host.com issuer=/CN=host/C=ES/ST=Spain/L=Madrid/O=Company/OU=Company/emailAddress=usuario@host.com --- No client certificate CA names sent --- SSL handshake has read 1635 bytes and written 387 bytes ...

Cogemos el certificado, es decir, lo que hay entre BEGIN CERTIFICATE y END CERTIFICATE (ambas líneas incluidas) y lo metemos en un archivo .crt. A continuación, editamos el fichero /etc/lftp.conf, última línea, y lo enlazamos en el apartado set ssl:ca-file:

## SSL default settings #set ssl:ca-file "/etc/ssl/ca-bundle.pem" set ssl:ca-file "/ruta/hacia/el/archivo.crt"

Una vez hecho esto, ya podremos conectar con el host usando la encriptación punto a punto con:

HOST # lftp -p puerto -u usuario,password ftps://host
0

0 comentarios:

Publicar un comentario