Попытка подключиться с клиента с использованием следующей строки работает:
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 в каком-нибудь стороннем репозитории или скомпилировать свою собственную.