#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 с последними версиями можно ознакомиться здесь:
Я думаю, что эта строка может включить все версии 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