Назад | Перейти на главную страницу

подключение к FTP по TLS не удается от одного клиента, но удается от другого

Попытка подключиться с клиента с использованием следующей строки работает:

client2@client2 curl -v --ssl -u 'user:password' ftp://www.example.com:21
* Rebuilt URL to: ftp://www.example.com:21/
*   Trying 192.168.177.186...
* Connected to www.example.com (192.168.177.186) port 21 (#0)
< 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
< 220-You are user number 1 of 50 allowed.
< 220-Local time is now 09:16. Server port: 21.
< 220-This is a private system - No anonymous login
< 220-IPv6 connections are also welcome on this server.
< 220 You will be disconnected after 15 minutes of inactivity.
> AUTH SSL
< 500 This security scheme is not implemented
> AUTH TLS
< 234 AUTH TLS OK.
* found 148 certificates in /etc/ssl/certs/ca-certificates.crt
* found 592 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384
*        server certificate verification OK
.
.
.
* Connect data stream passively
* ftp_perform ends with SECONDARY: 0
< 229 Extended Passive mode OK (|||35104|)
* Connecting to 192.168.177.186 (192.168.177.186) port 35104
* Connected to www.example.com (192.168.177.186) port 21 (#0)
> TYPE A
< 200 TYPE is now ASCII
* Remembering we are in dir ""
< 226-Options: -a -l 
< 226 6 matches total
* Connection #0 to host www.example.com left intact

Попытка подключиться с клиента не работает:

client1@client1:~> curl -v --ssl -u 'user:pass' ftp://www.example.com:21
* About to connect() to www.example.com port 21 (#0)
*   Trying 192.168.177.186...
* connected
* Connected to www.example.com (192.168.177.186) port 21 (#0)
< 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
< 220-You are user number 1 of 50 allowed.
< 220-Local time is now 09:15. Server port: 21.
< 220-This is a private system - No anonymous login
< 220-IPv6 connections are also welcome on this server.
< 220 You will be disconnected after 15 minutes of inactivity.
> AUTH SSL
< 500 This security scheme is not implemented
> AUTH TLS
< 234 AUTH TLS OK.
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs/
* SSLv3, TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to www.example.com:21
* Closing connection #0
curl: (35) Unknown SSL protocol error in connection to www.example.com:21

Что может быть причиной?

При успешном подключении client2 использует TLS 1.2, указывая, что оба конца поддерживают его:

> AUTH SSL
< 500 This security scheme is not implemented
> AUTH TLS
< 234 AUTH TLS OK.
...
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384

При неудачном соединении client1 похоже, пытается использовать известный сломанный SSLv3:

* SSLv3, TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to www.example.com:21

Я предполагаю, что библиотека SSL, которая curl использует на client1 (OpenSSL? GnuTLS? Что-то еще?) Слишком стар, чтобы поддерживать TLS1.2 и / или алгоритмы шифрования, принятые сервером. Он пытается полностью вернуться к алгоритмам шифрования эпохи SSLv3, и сервер отклоняет все протоколы / алгоритмы шифрования, предлагаемые клиентом, как слишком слабые или сломанные.

Поскольку вы оставили имя хоста без дезинфекции в нижней строке client2 вывод, я отправил URL сайта на https://www.ssllabs.com/ssltest/ и похоже, что серверу требуется как минимум TLS 1.1.

Чтобы исправить client1, вы должны выяснить, какая библиотека SSL / TLS используется curl на этом хосте (ldd $(which curl) может быть там полезен) и убедитесь, что библиотека обновлена ​​настолько, насколько это возможно.

Но если client1 использует устаревший дистрибутив Linux, который больше не имеет активной поддержки безопасности, возможно, не будет доступного достаточно нового обновленного пакета библиотеки SSL / TLS. На этом этапе вам может потребоваться поискать обновленную версию curl + соответствующую библиотеку SSL / TLS в каком-нибудь стороннем репозитории или скомпилировать свою собственную.