Неизвестный сертификат Indy TIdFTP SSL

#delphi #ssl #ftp #indy

#delphi #ssl #ftp #indy

Вопрос:

Я использую Delphi 10.x и код FTP-клиента SSL, и он хорошо работает на одном FTP-SSL-сервере, который я использую с серверов OVH. Тем не менее, он не работает на другом, и я не понимаю, почему.

У меня ошибка 10054.

Я протестировал его на ftptest.net и это нормально, см. Ниже.

Вот код, связанный с TLS / SSL, который я добавил в стандартный код FTP-клиента

 IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
FFtp.IOHandler              := IdSSLIOHandlerSocketOpenSSL;
FFTP.UseTLS                 := utUseExplicitTLS;
FFTP.DataPortProtection     := ftpdpsPrivate;
 

Вот файл журнала ftptest.net

 Status: Resolving address of s223.panelboxmanager.com

Status: Connecting to 2607:f748:1301:0:184:107:112:57

Status: Connected, waiting for welcome message...

Reply: 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------

Reply: 220-You are user number 3 of 100 allowed.

Reply: 220-Local time is now 15:11. Server port: 21.

Reply: 220-This is a private system - No anonymous login

Reply: 220 You will be disconnected after 2 minutes of inactivity.

Command: CLNT https://ftptest.net on behalf of (Hidden IP)

Reply: 530 You aren't logged in

Command: AUTH TLS

Reply: 234 AUTH TLS OK.

Status: Performing TLS handshake...

Status: TLS handshake successful, verifying certificate...

Status: Received 2 certificates from server.

Status: cert[0]: subject='OU=Domain Control Validated,CN=*.panelboxmanager.com' issuer='C=BE,O=GlobalSign nv-sa,CN=AlphaSSL CA - SHA256 - G2'

Status: cert[1]: subject='C=BE,O=GlobalSign nv-sa,CN=AlphaSSL CA - SHA256 - G2' issuer='C=BE,O=GlobalSign nv-sa,OU=Root CA,CN=GlobalSign Root CA'

Command: USER XXXXX

Reply: 331 User XXXXX OK. Password required

Command: PASS *********

Reply: 230 OK. Current restricted directory is /

Command: SYST

Reply: 215 UNIX Type: L8

Command: FEAT

Reply: 211-Extensions supported:

Reply: EPRT

Reply: IDLE

Reply: MDTM

Reply: SIZE

Reply: MFMT

Reply: REST STREAM

Reply: MLST type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*;

Reply: MLSD

Reply: AUTH TLS

Reply: PBSZ

Reply: PROT

Reply: UTF8

Reply: TVFS

Reply: ESTA

Reply: PASV

Reply: EPSV

Reply: SPSV

Reply: ESTP

Reply: 211 End.

Command: PBSZ 0

Reply: 200 PBSZ=0

Command: PROT P

Reply: 200 Data protection level set to "private"

Command: PWD

Reply: 257 "/" is your current location

Status: Current path is /

Command: TYPE I

Reply: 200 TYPE is now 8-bit binary

Command: EPSV

Reply: 229 Extended Passive mode OK (|||33966|)

Command: MLSD

Status: Data connection established, performing TLS handshake...

Reply: 150 Accepted data connection

Status: TLS handshake successful, verifying certificate...

Status: Received 2 certificates from server.

Status: cert[0]: subject='OU=Domain Control Validated,CN=*.panelboxmanager.com' issuer='C=BE,O=GlobalSign nv-sa,CN=AlphaSSL CA - SHA256 - G2'

Status: cert[1]: subject='C=BE,O=GlobalSign nv-sa,CN=AlphaSSL CA - SHA256 - G2' issuer='C=BE,O=GlobalSign nv-sa,OU=Root CA,CN=GlobalSign Root CA'

Status: TLS session of transfer connection has been resumed.

Listing: type=cdir;sizd=331776;modify=20201227201104;UNIX.mode=0711;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g4e40001; .

Listing: type=pdir;sizd=331776;modify=20201227201104;UNIX.mode=0711;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g4e40001; ..

Listing: type=dir;sizd=4096;modify=20200914031725;UNIX.mode=0700;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g4e40038; .autorespond

Listing: type=file;size=11333;modify=20200731001231;UNIX.mode=0600;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g4e4405e; .bash_history

Listing: type=file;size=33;modify=20091230222848;UNIX.mode=0644;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g4e400a8; .bash_logout

Listing: type=file;size=296;modify=20190608053032;UNIX.mode=0644;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g4e4013e; .bash_profile

Listing: type=file;size=205;modify=20190608052818;UNIX.mode=0644;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g4e40004; .bashrc

Listing: type=dir;sizd=4096;modify=20190608053226;UNIX.mode=0775;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g5100940; .cache

Listing: type=dir;sizd=4096;modify=20180727100540;UNIX.mode=0771;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g4e4003b; .cagefs

Listing: type=dir;sizd=4096;modify=20201215110057;UNIX.mode=0755;UNIX.uid=1432;UNIX.gid=1433;unique=ca06g4e4003d; .cl.selector

Reply: 226-Options: -a -l

Reply: 226 68 matches total

Status: Skipped display of 58 listing lines

Status: Success
 

Комментарии:

1. Где ваш код, который показывает, что вы уже пробовали и где вы потерпели неудачу? Как выглядит текущая обработка ошибок?

2. Вы программируете на Delphi FTP-сервер или FTP-клиент?

3. Это клиентское программное обеспечение.

Ответ №1:

Просто добавив это, он решил проблему:

 IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_2;
 

Иногда это очень сложно …. также обновлено ssleay32.dll и libeay32.dll с последними версиями можно ознакомиться здесь:

https://indy.fulgan.com/SSL/

Я думаю, что эта строка может включить все версии SSL

 IdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions := [sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];
 

Приветствуются любые комментарии, если размещение этой строки со всеми версиями может быть проблемой.

Комментарии:

1. TIdSSLIOHandlerSocketOpenSSL по умолчанию включает только TLS 1.0 , но в настоящее время многие серверы отказываются от этого. Следовательно, необходимо включить TLS 1.1 вручную. Кроме того, SSLOptions.Method свойство устарело, используйте только SSLOptions.SSLVersions свойство (но НЕ включайте sslvSSLv2..sslvSSLv3 ). И зеркало Fulgan устарело , используйте github.com/IndySockets/OpenSSL-Binaries сейчас же.

2. «но НЕ включайте sslvSSLv2 ..sslvSSLv3» Почему нет ? Это единственный способ получить доступ к моему FTP-серверу OVH И s223.panelboxmanager.com FTP-сервер… В противном случае, что я могу сделать с этими SSLOptions. sslверсии, чтобы он работал в широком диапазоне FTP-серверов?

3. SSL версии v2.0 и v3.0 больше не являются безопасными, поэтому их больше никто не использует, и, следовательно, нет веских причин когда-либо включать их в современном коде, за исключением доступа к устаревшим системам. Что касается sslvSSLv23 подстановочного знака, который Indy использует внутри, нет необходимости включать его вручную (и фактически, Indy просто проигнорирует его, если включена любая другая версия).

4. Реми, я знаю, что ты гуру Indy, твое имя повсюду в исходном коде этого шедевра. Повредит ли, если я поставлю их все, чтобы они были совместимы с тем, к какому FTP-серверу может подключаться программное обеспечение Imy? Я просто загружаю файлы изображений, которые становятся общедоступными на страницах HTTP / s, так что это общедоступные данные, поэтому безопасность здесь не является моей главной заботой. sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2