Перейти к содержанию
Fire Monkey от А до Я
  • 0

[DELPHI FMX Android] [6.0] Не удается загрузить SSL библиотеку


bossalex

Вопрос

Недавно компилил приложение на Delphi  FMX Android  при обращении  к серверу https при выполнении Get запроса от компонента TIdHttp запросил библиотеку "Could not load SSL library" используется протокол sslvTLSv1_2 в windows все пашет в андроид нет , накопал что можно подключить библиотеки  libssl.so и  libcrypto.so через  deployment .assets\internal , А вот как в коде дальше их использовать никто примерчик не выложил, хоть и обсуждали на интернет просторах 100 раз, те как прикрутить  к IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile. Если есть у кого код выложите пожалуйста? или скинте по email bossalex@ya.ru

IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method.sslvTLSv1_2;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode.sslmUnassigned;

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 1
4 часа назад, bossalex сказал:

Недавно компилил приложение на Delphi  FMX Android  при обращении  к серверу https при выполнении Get запроса от компонента TIdHttp запросил библиотеку "Could not load SSL library" используется протокол sslvTLSv1_2 в windows все пашет в андроид нет , накопал что можно подключить библиотеки  libssl.so и  libcrypto.so через  deployment .assets\internal , А вот как в коде дальше их использовать никто примерчик не выложил, хоть и обсуждали на интернет просторах 100 раз, те как прикрутить  к IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile. Если есть у кого код выложите пожалуйста? или скинте по email bossalex@ya.ru

IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method.sslvTLSv1_2;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode.sslmUnassigned;

 

 

Ссылка на комментарий
  • 0
В 30.09.2017 в 03:01, bossalex сказал:

 

Просто пытаетесь выполнить get запрос? Очень странно, у меня все работало. Даже в справке от эмбы написано:

For OS X and Android, your application does not need to meet any prerequisite for TLS/SSL support. The required OpenSSL library is available by default on those operating systems.

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Securing_Indy_Network_Connections

Может дело в версии студии/ведра?

Ссылка на комментарий
  • 0
  • Модераторы
12 минуты назад, M1shQa сказал:

Может дело в версии студии/ведра?

все дело в TidHTTP (Indy) - его нельзя использовть под Андроидом

Ссылка на комментарий
  • 0

 

3 часа назад, Равиль Зарипов (ZuBy) сказал:

все дело в TidHTTP (Indy) - его нельзя использовть под Андроидом

Систем.нет.хттп? Кстати да, на андроиде все плохо, особенно когда ковырял сервис, в сервисе заработал только систем нет сокет..

Ссылка на комментарий
  • 0
  • Модераторы
3 минуты назад, M1shQa сказал:

 

Систем.нет.хттп? Кстати да, на андроиде все плохо, особенно когда ковырял сервис, в сервисе заработал только систем нет сокет..

System.Net.* - нативный, он на всех платформах работает правильно, а Indy не работает на андроиде, т.к. используется другая либа (не boringSSL)

Ссылка на комментарий
  • 0

Кто знает как яндекс почту прикрутить к indy с ssl под дектоп работает, под андроид раньше работало сейчас оред что в отладке при коннекте SMTP не загружена библиотека SSL ранше использовал связку tidSMTP+tidMessage+IdSSLIOHandlerSocketOpenSSL c 465 портом

Этото код работает в десктопе на яндексе под win рабоатает со внешними библиотекеми SSL типа libeay32.dll ssleay32dll

Function TFormOFORMLENIE.mail(email:STRING):Boolean;
var email:String;
begin
  try
    Smtp.AuthType:=satDefault;
    SMTP.ReadTimeout:=10000;
    SMTP.Host := 'smtp.yandex.ru';
    SMTP.Port := 465;
    SMTP.Username :=login;
    SMTP.Password :=pass;

    SMTP.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
    SMTP.UseTLS:= utUseImplicitTLS;

    IdSSLIOHandlerSocketOpenSSL1.Destination := SMTP.Host+':'+IntToStr(SMTP.Port);
    IdSSLIOHandlerSocketOpenSSL1.Host := SMTP.Host;
    IdSSLIOHandlerSocketOpenSSL1.Port := SMTP.Port;
    IdSSLIOHandlerSocketOpenSSL1.DefaultPort := 0;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=sslvTLSv1;
    IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
    MailMessage.From.Name := 'Тест';
    MailMessage.Subject := 'Тест: '+FormatDateTime('dd.mm.yy-hh:nn',Now) ;

    MailMessage.From.Address :='bossalex@ya.ru';
    MailMessage.Recipients.EMailAddresses := email;
    MailMessage.Body.Text := MemoTXT.Text;
  try
      try
        SMTP.Connect;// орет нет библиотеки SSL - под win рабоатает со внешними библиотекеми SSL типа libeay32.dll ssleay32dll только не FMX на VCL к яндексу коннектися и отправляет письма,

// есть еще libgcc_s_dw2-1.dll libwinpthread-1.dll msvcr100.dll правда не помню тоже какието библиотеки забыл для чего, надо в инете поковырять
        sleep(200);
        Application.ProcessMessages;
        SMTP.Send(MailMessage);
        ShowMessage('Письмо отправлено!');
        MailMessage.MessageParts.Clear;
      except
        on e: Exception do
        begin
          sleep(200);
          ShowMessage('Письмо не отправлено!');
        end;
      end;
    finally
      MailMessage.MessageParts.Clear;
      SMTP.Disconnect;
    end;
  except
  end;
end;

Ссылка на комментарий
  • 0

На stackoverflow описано решение этой проблемы. Суть в том, что мы принудительно заставляем Indy использовать OpenSSL вместо BorinSSL:

1. добавляем в project deployment для андроида 2 файла: libcrypto.so и libssl.so (взять их можно на https://forums.embarcadero.com/thread.jspa?threadID=211147), в качестве Remote path для обоих файлов указываем .\assets\internal

2. убеждаемся, что в .dpr модуль System.StartUpCopy указан самым первым

3. при запуске приложения вызываем IdOpenSSLSetLibPath(TPath.GetDocumentsPath) 

примечание к версии SSL - на файлы по ссылке из п.1 Google не выдает предупреждений, а на более старые версии будет ругаться

Ссылка на комментарий
  • 0
В 08.11.2017 в 13:54, Tumaso сказал:

На stackoverflow описано решение этой проблемы. Суть в том, что мы принудительно заставляем Indy использовать OpenSSL вместо BorinSSL:

1. добавляем в project deployment для андроида 2 файла: libcrypto.so и libssl.so (взять их можно на https://forums.embarcadero.com/thread.jspa?threadID=211147), в качестве Remote path для обоих файлов указываем .\assets\internal

2. убеждаемся, что в .dpr модуль System.StartUpCopy указан самым первым

3. при запуске приложения вызываем IdOpenSSLSetLibPath(TPath.GetDocumentsPath) 

примечание к версии SSL - на файлы по ссылке из п.1 Google не выдает предупреждений, а на более старые версии будет ругаться

Добрый день!

На Androide7 у меня не работает! Все равно выдает Could not load SSL!  Как на Андроиде 7 передать почту используя SSL. На Андроиде 5 почта  с SSL передается вообще без проблем 

Ссылка на комментарий
  • 0
23 часа назад, Юрий Гусач сказал:

Добрый день!

На Androide7 у меня не работает! Все равно выдает Could not load SSL!  Как на Андроиде 7 передать почту используя SSL. На Андроиде 5 почта  с SSL передается вообще без проблем 

Лучший вариант отказаться от Indy и использовать родную библиотеку из модуля System.Net.HttpClient и THTTPClient. Она и более стабильная на всех 4 ОС и SSL работает прозрачно.

Что означает "передать почту"?

 

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0

[ENERGY] Подскажите тогда, как с помощью родной библиотеки отправить e-mail адресату из приложения? Компоненты Indy позволяют это сделать!

Скачайте просто свежий SSL с сайта Indy

Ссылка на комментарий
  • 0
2 часа назад, wamaco сказал:

[ENERGY] Подскажите тогда, как с помощью родной библиотеки отправить e-mail адресату из приложения? Компоненты Indy позволяют это сделать!

Скачайте просто свежий SSL с сайта Indy

Я отправляю через PHP скрипт, а скрипт отправляет через SMTP хостинг сервера, который в данный момент работает. Т.е. отправляю письмо через POST запрос. Так можно и лог вести на сервере.

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0
33 минуты назад, ENERGY сказал:

Я отправляю через PHP скрипт, а скрипт отправляет через SMTP хостинг сервера, который в данный момент работает. Т.е. отправляю письмо через POST запрос. Так можно и лог вести на сервере.

Ну вот... вопрос? а если сервера нет.... и задача этого не требует... приплыли?

через post запрос любой сможет! ?

Как обойти, я написал выше! Скачать валидный SSL

Изменено пользователем wamaco
Ссылка на комментарий
  • 0
23 минуты назад, wamaco сказал:

Ну вот... вопрос? а если сервера нет.... и задача этого не требует... приплыли?

через post запрос любой сможет! ?

Как обойти, я написал выше! Скачать валидный SSL

В смысле сервера нет? А через какой SMTP тогда почта отправляется? Через сервер хостинг провайдера.

На деле это проще реализуется, чем кажется. Ведь даже "отправить комментарий разработчику", проще сделать через такой PHP скрипт, чем заморачиватся с Indy и SMTP компонентами.

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0
2 минуты назад, ENERGY сказал:

В смысле сервера нет? А через какой SMTP тогда почта отправляется? Через сервер хостинг провайдера.

На деле это проще реализуется, чем кажется.

Почта отправляется напрямую, без php скриптов и вашего сервера! и не надо никаких скриптов!

Вы же имеете ввиду, что вы запускаете скрипт PHP на своем сервере и шлете почту! так?

Ссылка на комментарий
  • 0
10 минут назад, wamaco сказал:

Почта отправляется напрямую, без php скриптов и вашего сервера! и не надо никаких скриптов!

Вы же имеете ввиду, что вы запускаете скрипт PHP на своем сервере и шлете почту! так?

Ну как это напрямую, на деревню дедушке что-ли? На SMTP сервер же. А где вы его берете? Не бесплатными же пользоваться, которые могут забанить в любое время, по любым причинам, с лимитированным кол. писем.

Я из программы вызываю https://mysite.com/sendemail.php  с post параметрами. Все шифруется с https. И дальше уже заботы PHP скрипта и сервера.

 

 

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0
23 минуты назад, ENERGY сказал:

Ну как это напрямую, на деревню дедушке что-ли? На SMTP сервер же. А где вы его берете? Не бесплатными же пользоваться, которые могут забанить в любое время, по любым причинам, с лимитированным кол. писем.

Я из программы вызываю https://mysite.com/sendemail.php  с post параметрами. Все шифруется с https. И дальше уже заботы PHP скрипта и сервера.

 

 

По-моему, Вы не знаете, как работает Indy. Используя эти компоненты, можно послать письмо, минуя свой сервер, вы сразу настраиваете параметры отсылки, аналогично, любому почтовому клиенту и отсылаете письмо! 

например, я не знаю и знать не хочу PHP и сервера у меня нет! как мне отослать письмо с приложения? INDY спешит на помощь!

Вот пример:

var
  SMTP    : TIdSMTP;
  msg     : TIdMessage;
  SSLOpen : TIdSSLIOHandlerSocketOpenSSL;
begin
  SMTP := TIdSMTP.Create(Application);
  SMTP.Host := 'smtp.mail.ru';
  SMTP.Port := 465;
  SMTP.AuthType := satDefault;
  SMTP.Username := 'моя почта@mail.ru';
  SMTP.Password := 'пароль от моей почты ';
 
  //это необходимо использовать для SSL
  SSLOpen := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSLOpen.Destination := SMTP.Host+':'+IntToStr(SMTP.Port);
  SSLOpen.Host := SMTP.Host;
  SSLOpen.Port := SMTP.Port;
  SSLOpen.DefaultPort := 0;
  SSLOpen.SSLOptions.Method := sslvSSLv23;
  SSLOpen.SSLOptions.Mode := sslmUnassigned;
 
  SMTP.IOHandler := SSLOpen;
  SMTP.UseTLS := utUseImplicitTLS;
 
  msg := TIdMessage.Create(Application);
  msg.Subject := 'Проверка почты';
  msg.From.Address := 'моя почта@mail.ru';
  msg.From.Name := 'AlexF';
  msg.Recipients.EMailAddresses := 'почта получателя@yandex.ru';
 
  SMTP.Connect;
  if SMTP.Connected then
    begin
      SMTP.Send(msg);
      ShowMessage ('Сообщение отправлено');
    end else
      ShowMessage ('Не удалось отправить сообщение');
  SMTP.Disconnect();
  SMTP.Free;
  msg.Free;
end;
Изменено пользователем wamaco
Ссылка на комментарий
  • 0

Посмотрите на пример Indy наверху. Там написано: 

  SMTP.Host := 'smtp.yandex.ru';
Вот про него я и говорю, что бесплатный SMTP сервер это очень нестабильная вещь, и забанить там могут в любое время, по любой причине. Кстати, smtp.yandex.ru в Украине не будет работать.

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0
2 минуты назад, ENERGY сказал:

Посмотрите на пример Indy наверху. Там написано: 

  SMTP.Host := 'smtp.yandex.ru';
Вот про него я и говорю, что бесплатный SMTP сервер это очень нестабильная вещь, и забанить там могут в любое время, по любой причине. Кстати, smtp.yandex.ru в Украине не будет работать.

Это просто Вам, как пример! Еще раз... отправить письмо надо! Сервера нет! (нет денег содержать, нет возможностей и т.д.)

Вы сделали приложение, передали заказчику, там функционал отправки письма! Кто оплачивает сей фуршет по отправке? ?

Вы держите сервер и всех там обслуживаете?

Изменено пользователем wamaco
Ссылка на комментарий
  • 0

Смысл от такого функционала, если через неделю он не будет работать, причем разработчик об этом не будет знать, т.к. письма не будут доходить. А так, да, заказчик должен арендовать хостинг, 2-3$ в месяц не такая большая цена, где все есть "в пакете" и уже готово к работе. Причем на хостинге обычно и база находится и\или вебсайт.

Изменено пользователем ENERGY
Ссылка на комментарий
  • 0
10 часов назад, ENERGY сказал:

Смысл от такого функционала, если через неделю он не будет работать, причем разработчик об этом не будет знать, т.к. письма не будут доходить. А так, да, заказчик должен арендовать хостинг, 2-3$ в месяц не такая большая цена, где все есть "в пакете" и уже готово к работе. Причем на хостинге обычно и база находится и\или вебсайт.

Слишком много ЕСЛИ.... 

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

А через неделю и Ваш хостинг может загнуться, ввиду не оплаты, форс мажора и т.д.

Ссылка на комментарий
  • 0
  • Модераторы

Вообще не совсем понятно зачем делать отправку письма из приложения.

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

самый простой способ это хостинг ну или текущий сайт компании, там реализовать отправку письма как предлагал @ENERGY

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...