Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SLL Indy 9 vs D7 / 22 сообщений из 22, страница 1 из 1
10.07.2019, 09:53
    #39835812
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
2 дня мудохался с ошибками Could not load SSL library и Error connecting with ssl

весь интернет перерыл, обновился до 9.0.50, попробовал кучу всяких dll от openssl и собранных только для Indy, оставалось только на 10ку перейти, потом купить типа саму среду и весь тот бред что советуют в тырнетах

Суть проблемы в совместимости библиотек ssleay32.dll и libeay32.dll с Indy 9 в большинстве случаев с IdSSLOpenSSLHeaders.pas (частично наверное и IdSSLOpenSSL), в котором есть кривая функция Load, подгружающая эти библиотеки и проверяющая их "версию" (тестирование указателей на нахождение функций в либах). Поскольку функций там тьма, где в какой версии либ реализовано хрен поймешь, при отсутствии их естественно вываливается 1 ошибка, однако с подсунутыми валится вторая, но заметил особенность случайно - если либ нету на машине после получения первой ошибки подсовываем при запущенном EXE имеющие DLL и видим вдруг не с того не с сего - GET проходит, чудиса!? перезапускаем прогу - хертам, 2ая ошибка

лезем в эту Load и видим вот такую ересь
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  if hIdCrypto = 0 then hIdCrypto := LoadLibrary(SSLCLIB_DLL_name);
  If hIdSSL = 0 Then hIdSSL := LoadLibrary(SSL_DLL_name) else exit;

  @IdSslCtxSetCipherList := LoadFunction(fn_SSL_CTX_set_cipher_list);
  @IdSslCtxNew := LoadFunction(fn_SSL_CTX_new);
  @IdSslCtxFree := LoadFunction(fn_SSL_CTX_free);
и бла бла бла

и в конце
  result :=
    (@IdSslCtxSetCipherList<>nil) and
    (@IdSslCtxNew<>nil) and
и тады


т.е. либа грузится, а потом начинается херня по ее проверке, хедеры при этом не освобождаются, но и доступа снаружи до этого бреда нет

вариант использованный мной следующий - поскольку мне не нужен весь функционах из хрен пойми какой либы подо что то собранный, просто напросто после инициализации всех переменных до гетов с постами делаю
Код: pascal
1.
IdSSLOpenSSLHeaders.Load


И ВСЕ!!! никаких версий не ищу, чужие исходники не правлю, если где вывалится дальше ошибка какой то функции нет - отдельно задебажу
...
Рейтинг: 0 / 0
10.07.2019, 09:58
    #39835814
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
wolverin,

SSL конечно же, звиняйте
вопщим так для истории, кому немного допилить надо старые проги без тупых советов по обновлению
...
Рейтинг: 0 / 0
10.07.2019, 10:05
    #39835816
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
если что откель брал инди и длл
https://indy.fulgan.com/
...
Рейтинг: 0 / 0
10.07.2019, 10:15
    #39835824
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
а ну еще указывать надо SSLOptions.Method := sslvSSLv23;
...
Рейтинг: 0 / 0
10.07.2019, 10:20
    #39835827
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
мож кому вариант патча пригодится
http://www.cyberforum.ru/post4978037.html

мне не помогло )
...
Рейтинг: 0 / 0
10.07.2019, 10:36
    #39835835
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
wolverin,

там есть такая функция IdSSLOpenSSLHeaders.WhichFailedToLoad
...
Рейтинг: 0 / 0
10.07.2019, 10:39
    #39835838
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
Cobalt747,

есть, но перебирать и дальше дллки искать какую же надо нет никакого желания, в ручную делаете Load погнали дальше до ошибки
...
Рейтинг: 0 / 0
10.07.2019, 10:40
    #39835840
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
wolverin до ошибки
которой скорее всего и не будет
...
Рейтинг: 0 / 0
10.07.2019, 11:00
    #39835850
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
wolverin,

проект большой или в начале?
если что (ну тупик то есть), переходите на Synapse :)
...
Рейтинг: 0 / 0
10.07.2019, 11:01
    #39835851
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
Кроик Семён,

проект вообще лохматых годов, надо всего лишь json отправлять на https
...
Рейтинг: 0 / 0
10.07.2019, 11:18
    #39835866
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
wolverin,

подумайте, может переход на Synapse будет и не таким затратным.


На всякий случай прикладываю код из моего проекта, вдруг пригодится

function SendHttpPostRequest
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
UNIT ...

INTERFACE

USES Classes;


   function SendHttpPostRequest(const AURL, APOSTData: string;
                                const AAnswer: TStream;
                                var AErrMsg: string;
                                const AUserName: string='';
                                const APassword: string=''): Boolean; overload;

   function SendHttpPostRequest(const AURL, APOSTData: string;
                                var AAnswer: string;
                                var AErrMsg: string;
                                const AUserName: string='';
                                const APassword: string=''): Boolean; overload;


IMPLEMENTATION

USES ssl_openssl, httpsend;


//------------------------------------------------------------------------------
//based on Synapse
//For HTTPS-Support:
//  1) USES ssl_openssl;
//  2) copy libeay32.dll
//  3) copy ssleay32.dll

function SendHttpPostRequest(const AURL, APOSTData: string;
                             const AAnswer: TStream;
                             var AErrMsg: string;
                             const AUserName: string;
                             const APassword: string): Boolean;
var
   HTTP: THTTPSend;
begin
   AErrMsg:='';

   HTTP := THTTPSend.Create();
   try
      HTTP.UserName:=AUserName;
      HTTP.Password:=APassword;

      //-- ShowMessage(HTTP.Sock.SSL.LibName);

      WriteStrToStream(HTTP.Document, APOSTData);
      HTTP.MimeType := 'application/x-www-form-urlencoded';
      Result := HTTP.HTTPMethod('POST', AURL);
      if Result then
         AAnswer.CopyFrom(HTTP.Document, 0)
      else
         AErrMsg:=HTTP.Sock.LastErrorDesc;
   finally
      FreeAndNil(HTTP);
   end;
end;
//------------------------------------------------------------------------------
function SendHttpPostRequest(const AURL, APOSTData: string;
                             var AAnswer: string;
                             var AErrMsg: string;
                             const AUserName: string;
                             const APassword: string): Boolean;
var
   Mem   : TMemoryStream;
   iLen  : integer;
begin
   AAnswer:='';
   AErrMsg:='';

   Mem:=TMemoryStream.Create();
   try
      Result:=SendHttpPostRequest(AURL,APOSTData,
                                  Mem,
                                  AErrMsg,
                                  AUserName, APassword);

      if Result then
      begin
         mem.Position:=0;
         iLen:=mem.Size;
         
         SetLength(AAnswer, iLen);
         if iLen>0 then
            mem.ReadBuffer(AAnswer[1],iLen);
      end
   finally
      FreeAndNil(Mem);
   end;
end;

END.


...
Рейтинг: 0 / 0
10.07.2019, 12:23
    #39835907
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
вот потому я и не рекомендую никому начинать НОВЫЕ проекты на базе индюков...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.07.2019, 13:02
    #39835930
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
подумайте, может переход на Synapse будет и не таким затратным.

Как-то я пробовал делать обмен через https при помощи Synapse. Не понравилось то, что на этапе инициализации происходит возня с криптографией и прога из-за этого грузится на секунду дольше. В Indy и OverbyteIcs такой возни нет.
...
Рейтинг: 0 / 0
10.07.2019, 13:48
    #39835949
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
Кроик Семёнподумайте, может переход на Synapse будет и не таким затратным.

) спасибо, не было бы привязки к старому локальному виндовому приложению - написал бы это все на java
...
Рейтинг: 0 / 0
10.07.2019, 14:34
    #39835972
evgen29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
забей на Инди. Старые серты может не читать.
Там нужно еще заморочиться поискать библиотеку под разные типы сертов.
Держи класс(только лишнее убери), использует com-объект винды для доступа к ссш:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
unit HTTPClassUnit;

interface
uses ActiveX, ComObj, Variants, SysUtils;

type
  TSSHCom = class(TObject)
  private
    { Public declarations }
    class function Request(const URI, method, protocol: string; const data: string = ''; const token: string = ''; const location: string = ''): Widestring;
  public
    class function RequestHTTPS(const URI, method: string; const data: string = ''; const token: string = ''): Widestring;
    class function RequestHTTP(const URI, method: string; const data: string = ''; const token: string = ''): Widestring;
  end;

implementation
uses IniClassUnit, LogUnit, uLkJSON;

class function TSSHCom.Request(const URI, method, protocol: string; const data: string = ''; const token: string = ''; const location: string = ''): Widestring;
var
  Request: OleVariant;
  Resp, proxystr: string;
  status: integer;
  js: TlkJSONobject;
begin
  Request := CreateOleObject('WinHttp.WinHttpRequest.5.1');
  proxystr := IniRep.proxystr;
  if trim(proxystr) <> '' then
    Request.SetProxy(2, proxystr);
  LogClass.WriteLog('');
  LogClass.WriteLog('===========================================================');
  LogClass.WriteLog('proxystr=' + proxystr);
  LogClass.WriteLog('data=' + data);
  LogClass.WriteLog('token=' + token);
  LogClass.WriteLog('method=' + method);

  if location = '' then
  begin
    Request.Open(method, protocol + '://' + HostName + '/' + URI, False);
  end
     else
  begin
    Request.Open(method, location, False);
  end;
  Request.SetRequestHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0');
  if trim(token) <> '' then
    Request.SetRequestHeader('Authorization', 'token ' + token);
  Request.SetRequestHeader('cache-control', 'no-cache');
  Request.SetRequestHeader('Accept-Language', 'ru');
  Request.SetRequestHeader('content-type', 'application/json');
  Request.SetRequestHeader('Accept-Charset', 'utf-8');
  Request.Send(data);
  LogClass.WriteLog('response_text=' + Request.ResponseText + ',status='+IntToStr(Request.Status));
  LogClass.WriteLog('===========================================================');
  LogClass.WriteLog('');  
  if Request.Status = 200 then
    result := Request.ResponseText else
  begin
    js := TlkJSON.ParseText(Request.ResponseText) as TlkJSONobject;
    if Request.Status = 301 then
      result := Self.Request(URI, method, protocol, data, token, Request.getResponseHeader('Location'))
    else
      raise Exception.Create(Request.ResponseText);
  end;
end;

class function TSSHCom.RequestHTTPS(const URI, method: string; const data: string = ''; const token: string = ''): Widestring;
begin
  result := TSSHCom.Request(URI, method, 'https', data, token);
end;

class function TSSHCom.RequestHTTP(const URI, method: string; const data: string = ''; const token: string = ''): Widestring;
begin
  result := TSSHCom.Request(URI, method, 'http', data, token);
end;

end.
...
Рейтинг: 0 / 0
10.07.2019, 15:40
    #39836000
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
Мимопроходящийвот потому я и не рекомендую никому начинать НОВЫЕ проекты на базе индюков...

НОВЫЕ проекты на базе СТАРЫХ Indy.
...
Рейтинг: 0 / 0
10.07.2019, 15:41
    #39836002
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
Мы вот работаем на 10-ке, и прекрасно подходят стандартные сборки от OpenSSL
...
Рейтинг: 0 / 0
10.07.2019, 17:01
    #39836034
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
Cobalt747Мы вот работаем на 10-ке, и прекрасно подходят стандартные сборки от OpenSSLАналогично.
Единственное, что в мобильных приложения вместо TidHttp используем TNetHTTPClient, тогда с ssl вообще нет проблем
...
Рейтинг: 0 / 0
11.07.2019, 10:17
    #39836200
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
Cobalt747Мы вот работаем на 10-ке, и прекрасно подходят стандартные сборки от OpenSSL+1000.
Мудохался на 9-ке. Поставил 10 и все залетало.
...
Рейтинг: 0 / 0
11.07.2019, 12:03
    #39836280
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
10.07.2019 15:40, Cobalt747 пишет:
> НОВЫЕ проекты на базе СТАРЫХ Indy.

любые индюки со временем становятся СТАРЫМИ.
а на совместимость эти "творцы" всегда плевали,
исключительно из любви к искусству.

если есть возможность не вляпаться в это Г,
то нужно эту возможность непременно использовать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.07.2019, 12:21
    #39836290
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
wolverin,

Случайно не к Рудате соединяешься?
...
Рейтинг: 0 / 0
01.08.2019, 06:29
    #39843778
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SLL Indy 9 vs D7
Valery_BСлучайно не к Рудате соединяешься?
нет, к атоловским онлайн-кассам
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SLL Indy 9 vs D7 / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]