Guardar certificado para usar con lftp

6

¿Cómo puedo guardar un certificado para usarlo con lftp?

El certificado en cuestión no es aceptado por lftp cuando se descarga del servidor. Lo intenté

openssl s_client -connect {HOSTNAME}:21 -showcerts

de Cómo guardar un certificado SSL de servidor remoto localmente como un archivo, pero esto devuelve

CONNECTED(00000003) 3074045628:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:766:

no peer certificate available

Me estoy conectando con

lftp -p 21 -u {USER} {HOSTNAME}

y recibir

ls: Fatal error: Certificate verification: Not trusted

Greg C
fuente

Respuestas:

8

Creo que el problema aquí es que el servidor FTP usa FTP simple pero admite SSL / TLS explícito. Entonces, para seguir el protocolo, el cliente debe conectarse al servidor FTP e invocar el cifrado a través del comando AUTH. (El comando AUTH se envía en texto plano)

Entonces, para responder a su pregunta, no creo que sea posible mostrar el certificado. A menos que de alguna manera pueda enviar el comando AUTH al servidor FTP.

Editar: para mostrar certificados, haga lo siguiente:

openssl s_client -connect xxxx: 21 -starttls ftp

marcwho
fuente
5

Parece que lftp no está configurado correctamente en muchos sistemas, lo que hace que no pueda verificar los certificados del servidor. Quizás esta sea la causa subyacente de su problema.

La web está llena de sugerencias para solucionar esto al deshabilitar la verificación del certificado o el cifrado por completo. Esto no es seguro ya que permite que los ataques de hombre en el medio pasen desapercibidos.

La mejor solución es configurar la verificación del certificado correctamente, lo cual es fácil, afortunadamente. Para hacerlo, agregue la siguiente línea a /etc/lftp.conf(o alternativamente ~/.lftp/rc):

set ssl:ca-file "/etc/ssl/certs/ca-certificates.crt"

ca-certificates.crtes un archivo que contiene todos los certificados de CA del sistema. La ubicación utilizada anteriormente es la de Ubuntu y puede variar en diferentes sistemas. Para generar o actualizar el archivo, ejecute update-ca-certificates:

sudo update-ca-certificates

Si su sistema no tiene este comando, puede crear uno manualmente como este:

cat /etc/ssl/certs/*.pem | sudo tee /etc/ssl/certs/ca-certificates.crt > /dev/null
ingomueller.net
fuente
2

¿Está seguro de que este punto final está protegido correctamente con SSL? Desde el mensaje de error que muestra, ¿parece que el servidor no proporciona SSL? Además, el puerto 21 se usa principalmente para plainftp, no FTP o SFTP.

Esto es lo que obtengo cuando ejecuto el comando contra un servidor FTP simple

openssl s_client -connect xxx.yyy.zzz.www:21 -showcerts
CONNECTED(00000003)
140165093090976:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:749:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 225 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE

El error lftp puede deberse a una configuración incorrecta de lftp donde necesita ssl. Puedes probar lo siguiente:

set ftp:ssl-force false

De todos modos, también puedes probar una conexión usando

set ssl:verify-certificate no

Aunque esto solo es aceptable para pruebas y con cuentas de prueba (para no filtrar credenciales)

user35800
fuente
0

En mi caso, el problema fue causado por el servidor que solo admite versiones depreciadas de TLS que no son compatibles con las distribuciones modernas.

Prueba si puedes conectarte con openssl:

$ openssl s_client  -starttls ftp -connect <hostname>:21

CONNECTED(00000003)
140140192228416:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../ssl/statem/statem_lib.c:1940:
---
<remaining text snipped>

Este error se explica aquí: https://stackoverflow.com/a/53065682/1878199 , tl; dr; Debian ahora requiere al menos TLS 1.2.

Puede verificar qué admite su servidor utilizando nmap:

$ nmap --script ssl-enum-ciphers -p 21 <hostname>

PORT   STATE SERVICE
21/tcp open  ftp
| ssl-enum-ciphers: 
|   SSLv3: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: client
|     warnings: 
|       CBC-mode cipher in SSLv3 (CVE-2014-3566)
|   TLSv1.0: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: client
|_  least strength: A

(Consulte también https://security.stackexchange.com/a/70737 )

Entonces mi servidor solo acepta TLSv1.0. ¡La solución correcta sería actualizar el servidor, por supuesto!

Posibles soluciones en el lado del cliente:

  1. Usar SSL $ lftp -e "set ftp:ssl-auth SSL" <hostname>
  2. Deshabilitar SSL para esta conexión lftp -e "set ftp:ssl-allow no" <hostname>
  3. También puede intentar habilitar protocolos obsoletos en su cliente editando /etc/ssl/openssl.cnfcomo se describe en el primer enlace anterior. No recomendado.
ootwch
fuente