Zapisz certyfikat do użycia z lftp


6

Jak mogę zapisać certyfikat do użytku z lftp?

Certyfikat, o którym mowa, nie jest akceptowany przez lftp po pobraniu z serwera. próbowałem

openssl s_client -connect {HOSTNAME}:21 -showcerts

z Jak zapisać certyfikat SSL zdalnego serwera lokalnie jako plik, ale to zwraca

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

no peer certificate available

Łączę się z

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

i otrzymaj

ls: Fatal error: Certificate verification: Not trusted

Odpowiedzi:


8

Myślę, że problem polega na tym, że serwer FTP używa zwykłego FTP, ale obsługuje jawne SSL / TLS. Aby więc postępować zgodnie z protokołem, klient musi połączyć się z serwerem FTP i wywołać szyfrowanie za pomocą polecenia AUTH. (Polecenie AUTH jest wysyłane w postaci zwykłego tekstu)

Tak więc, aby odpowiedzieć na twoje pytanie, nie sądzę, aby można było pokazać certyfikat. Chyba że możesz w jakiś sposób wysłać polecenie AUTH na serwer FTP.

Edycja: Aby wyświetlić certyfikaty, wykonaj następujące czynności:

openssl s_client -connect xxxx: 21 -starttls ftp


4

Wygląda na to, że lftp nie jest poprawnie skonfigurowany w wielu systemach, co uniemożliwia weryfikację certyfikatów serwera. Może to jest podstawowa przyczyna twojego problemu.

Internet jest pełen sugestii, aby to naprawić, całkowicie wyłączając weryfikację certyfikatu lub szyfrowanie. Jest to niepewne, ponieważ pozwala niezauważonym atakom typu man-the-the-middle.

Lepszym rozwiązaniem jest prawidłowe skonfigurowanie weryfikacji certyfikatu, co na szczęście jest łatwe. Aby to zrobić, dodaj następujący wiersz do /etc/lftp.conf(lub alternatywnie ~/.lftp/rc):

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

ca-certificates.crtto plik zawierający wszystkie certyfikaty CA systemu. Lokalizacja używana powyżej to ta z Ubuntu i może się różnić w zależności od systemu. Aby wygenerować lub zaktualizować plik, uruchom update-ca-certificates:

sudo update-ca-certificates

Jeśli twój system nie ma tego polecenia, możesz utworzyć je ręcznie w następujący sposób:

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

2

Czy na pewno ten punkt końcowy jest poprawnie zabezpieczony przy użyciu protokołu SSL? Z wyświetlonego komunikatu o błędzie wydaje się, że serwer nie zapewnia ssl? Również port 21 jest najczęściej używany do zwykłego FTP, a nie FTP lub SFTP.

To właśnie otrzymuję po uruchomieniu polecenia na zwykłym serwerze FTP

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

Błąd lftp może być spowodowany błędną konfiguracją lftp w przypadku, gdy potrzebujesz ssl. Możesz spróbować:

set ftp:ssl-force false

W każdym razie możesz także spróbować użyć połączenia

set ssl:verify-certificate no

Chociaż jest to dopuszczalne tylko w przypadku testów i kont testowych (aby nie ujawnić poświadczeń)


0

W moim przypadku problem został spowodowany przez serwer obsługujący tylko amortyzujące wersje TLS, które nie są obsługiwane przez nowoczesne dystrybucje.

Sprawdź, czy możesz połączyć się z 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>

Ten błąd wyjaśniono tutaj: https://stackoverflow.com/a/53065682/1878199 , tl; dr; debian wymaga teraz przynajmniej TLS 1.2.

Możesz sprawdzić, co obsługuje twój serwer, używając 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

(Zobacz także https://security.stackexchange.com/a/70737 )

Mój serwer akceptuje tylko TLSv1.0. Oczywiście poprawnym rozwiązaniem byłoby zaktualizowanie serwera!

Możliwe rozwiązania po stronie klienta:

  1. Użyj SSL $ lftp -e "set ftp:ssl-auth SSL" <hostname>
  2. Wyłącz SSL dla tego połączenia lftp -e "set ftp:ssl-allow no" <hostname>
  3. Możesz także spróbować włączyć przestarzałe protokoły na swoim kliencie, edytując /etc/ssl/openssl.cnfzgodnie z opisem w pierwszym łączu powyżej. Niepolecane.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.