Подключение к FTP по TLS не удается с одного клиента, но успешно с другого
Попытка подключения с client2 с использованием следующей строки работает:
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@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
Что может быть причиной?
1 ответ
На успешном соединении 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 в каком-либо стороннем репозитории или скомпилировать свою собственную.