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:
Pero si usamos esta sintaxis sin más, veremos el siguiente error:
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:
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:
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:
Una vez hecho esto, ya podremos conectar con el host usando la encriptación punto a punto con:
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