Использование протокола HTTPS в приложениях на Delphi (с билиотекой Synapse и OpenSSL, без Indy)
Данная заметка к вопросу создания приложений-клиентов и приложений серверов HTTP (и, главное, HTTPS) на Delphi.
Читая случайно статью про набор компонентов Synapse, скептически относился к описанию, однако вот этот абзац заставил задуматься, т.к. он совпал с той картиной бытия, которая сформировалась у меня некоторое время назад при работе с Delphi (и, в частности, с компонентами Indy).
http://www.delphi.int.ru/articles/49/:
"Предположим, надо скачать файл/страницу с ресурса, использующего SSL. В случае с Indy это сделать очень сложно. Точнее, написать приложение-то просто, но вот чтобы оно работало... Оно или требует библиотеки OpenSSL, или говорит, что найденные библиотеки не подходят. Решается проблема скачиванием "правильных версий библиотек". Но даже имея их, всё равно проблемы. Если какое-то приложение использовало "неверные библиотеки", то до перезагрузки компьютера работать ничего не будет. Или то грузится, то нет. Почему так – предположения есть, но не хочется разбираться."
Ряд тезисов были проверены мной лично. И даже когда всё вроде бы работало, стабильности позавидовать было нельзя, так что решил попробовать новый для себя способ.
Клиент HTTPS на Delphi
С клиентом получилось действительно всё просто, как
1. Распаковал дистрибутив Synapse;
2. Скопировал Файлы из папки Lib в папку Source\Synapse;
3. Добавил папку Source\Synapse в списки путей Library и Browse в настройках Delphi;
4. Сделал доступными две DLL от OpenSSL (положил в папку с приложением);
5. use HttpSend, SSL_OpenSSL.
И правда, заработало. Само. Скачало страничку по HTTPS.
Сервер HTTPS на Delphi
Тут всё проще. Взял и открыл пример httpserv, который в комплекте. Работает.
Однако, этот пример без доработок, естественно, по протоколу HTTPS работать не захотел.
Возможно, есть более простой или правильный способ
Благодаря найденному через Google Code Search исходнику HTTPServ с применением Synapse, обнаружил, что чтобы пример httpserv, идущий в комплекте с Synapse, заработал по протоколу HTTPS с использованием OpenSSL, нужно в файле http.pas (реализация веб-сервера):
1) в процедуре TTCPHttpThrd.Execute добавить в начало после begin:
sock.SSLAcceptConnection;
2) в процедуре TTCPHttpDaemon.Execute заменить:
bind('0.0.0.0','80');
на
bind('0.0.0.0','443');
(443 - стандартный порт HTTPS).
И ура, https://localhost/ - открывается! Без Apache и прочих всех-всех-всех.
Респект автору Synapse и автору статьи.
Что делать с этим дальше, создавать или нет сертификаты, это вопрос отдельной песни. Главное, что работает в таком виде и без сертификатов (Synapse создает self-signed сертификат на время сеанса).
PS: оказалось нужные изменения в демо httpserv, были описаны здесь, надо было просто правильно искать
Постоянная ссылка ·
Добавьте на news2.ru
Похожие записи:
- XML-парсер для Delphi (NativeXML)
- Использование OpenOffice из Delphi
- Прокси-сервер на Delphi
- Решение проблемы с запуском Delphi 7 под Windows Vista
- Захват картинки с видеовхода на Delphi



Владимир said,
Декабрь 27, 2008 @ 14:25
У меня с https отлично работал с первого раза инди - скачать и установить послледнию версию, библиотека ssl тоже, но только не dll а целое приложение приходится устанавливать, но все работало отлично
Павел said,
Сентябрь 13, 2009 @ 13:45
спасибо автору!
После долгих поисков - единственная найденная мной статья, без ссылки на глючную indy
Hobit said,
Март 11, 2011 @ 12:30
Большое спасибо, Михаил!
Я уже себе мозг проел, как включить http в синапс, ничего не получалось. Оказывается, я тоже плохо искал, хотя излазил суппорт автора синапса вдоль и поперек
prot56k said,
Август 26, 2011 @ 00:49
Михаил, а у меня почему то соединение по https не работает, всё подправил как сказано в статье и фигня полная, по http нормально работает через браузер вижу тестовое сообщение от http сервера , потом меняю в исходниках httpserver как сказано, компилю, запускаю http сервер, снова в браузер https://localhost и всё висит а потом сообщение что типо не могу соединиться и всё такое, свой http клиент при методе HTTPMethod(’GET’, ‘https://localhost’) даёт такой же результат. Не могу понять в чем дело…..
Mikhail said,
Август 26, 2011 @ 06:14
Можете дать тестовый комплект файлов, я попробую скомпилировать у себя.
prot56k said,
Август 26, 2011 @ 18:24
Михаил я вам отправил письмо с прикрепленным исходником, но мне помоему пришло уведомление об ошибке отправки…………..
Джокич said,
Ноябрь 11, 2011 @ 18:06
А как из приложения на делфи использовать Клиентские сертификаты, которые эксплоэр сохранил с своем хранилище?
Wesley said,
Декабрь 28, 2011 @ 16:25
ÿþC