|
Вопрос # 2 538/ вопрос открыт / |
|
Здравствуйте, эксперты!
буду признателен, если наприавие по правильному пути в моей борьбе с подлой ошибкой, имя которой "Error connecting with SSL", причем - по сути - выскакивающей уже ПОСЛЕ(!!) получения данных через это самое SSL, но "убивающей" моё хрупкое приложение.
пытаюсь общаться со страничкой https с помощью компонентов TIdHTTP и TIdConnectionInterceptOpenSSL (Indy)
Delphi6. библиотеки OpenSSL: indy_OpenSSL096m
(пусть вас не пугает название странички, с которой я работаю - все, что я делаю - исключительно в учебных целях)
В бщем буду крайне признателен, если кто-нибудь отзывчивый хотя бы направит меня к решению данной проблемы, коих я вижу нескоько:
1.что-то у меня таки неправильно настроено...
2.возможно, есть вариант "задавить" эту ошибку - просто чтобы она не выскакивала. (пробовал удалить все упоминания об этой ощибке из соответствующего pas файла Sourse'ов - не помогло. Видимо надо удалять и перекомпилировать библиотеки для этого - omg)
3.возможно, есть более простой и "железный" способ общаться с приложениями через SSL. Буду признателен за ссылу на дельный faq.
ps. можно не писать о том, что моя программа может рассматриваться как вмешательство куда-то там :) с помощью этой программы в любом случае придется вводить изображения + не удастся зарегистрировать более 3 номеров в сутки.
но разобраться действительно хочется. :-(
зы2. Так же буду признателен за линк на нечто, более подробно рассказывающее о тонкостях работы с Https. (аж целых 2 или 3 странички, посвященные SSL+Https в IndyInDepth очень огорчили).
Приложение: Переключить в обычный режим-
-
- object HTTP: TIdHTTP
- ProtocolVersion = pv1_1
- RecvBufferSize = 1024
- HandleRedirects = True
- Request.Accept = '*/*'
- Request.ContentLength = 0
- Request.ContentRangeEnd = 0
- Request.ContentRangeStart = 0
- Request.ProxyPort = 81
-
-
- object SSL: TIdConnectionInterceptOpenSSL
- SSLOptions.Method = sslvSSLv3
- SSLOptions.Mode = sslmClient
- SSLOptions.VerifyMode = []
- SSLOptions.VerifyDepth = 0
-
-
-
- HTTP.Intercept := SSL;
- HTTP.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2; .NET CLR
1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)';
- HTTP.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/x-shockwave-flash, application/msword, application/x-ms-application,
application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*';
- HTTP.Request.Referer := 'https://www.icq.com/register/';
- HTTP.Request.ContentType:= 'application/x-www-form-urlencoded' ;
-
-
-
-
-
-
-
-
- HTTP.Request.ExtraHeaders.Text:='Cookie: geo=7; icq_ln='+memo4.Text+'; s_cc=true;
s_sq=aolwpicq%2Caolsvc%3D%2526pid%253Dicq%252520%25253A%252520Help%252520-%252520Registration%252520-%252520Index%2526pidt%253D1%2526oid%253DSubmit%2526oidt%253D3%2526ot%253DSUBMIT%2526oi%253D370;
icq_lang=ru';
-
-
-
- {send2: TMemo;}
- send2.lines.Add('service=30&lg_id=&qtype=&icq_ln='+memo1.text+'&nickname=somesickd&fname=&lname=&email=somenick93251@yandex.ru&gender=0&age=13&password=222222&password_confirm=222222&qa1=What+is+your+pet%27s+name%3F&userq1=&answer1=111111&gnm='+memo2.text+'&word='+edit1.Text+'&key=&lang=en');
-
-
-
-
- HTTP.DoRequest (hmpost,'https://www.icq.com/register/index.php', send2.lines, Reply);
-
-
- -------------------------------------------------------------
- POST /register/index.php HTTP/1.1
- Host: www.icq.com
- Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash,
application/msword, application/x-ms-application, application/x-ms-xbap,
application/vnd.ms-xpsdocument, application/xaml+xml, */*
- Referer: https://www.icq.com/register/
- User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
- Content-Length: 393
- Content-Type: application/x-www-form-urlencoded
- Cookie: geo=7; icq_ln=1148E273F0D2315B2644E911E88848C6BD98500CB2C713CE45BB080A05985BCE; s_cc=true;
s_sq=aolwpicq%2Caolsvc%3D%2526pid%253Dicq%252520%25253A%252520Help%252520-%252520Registration%252520-%252520Index%2526pidt%253D1%2526oid%253DSubmit%2526oidt%253D3%2526ot%253DSUBMIT%2526oi%253D370;
icq_lang=ru
-
- service=30&lg_id=&qtype=&icq_ln=442FC1F64BCA0ADA701F0F8479A1EC35A35E2AE0556A7742C9D0E47641CE38F0&nickname=somenick&fname=&lname=&email=somenick93251@yandex.ru&gender=0&age=13&password=222222&password_confirm=222222&qa1=What+is+your+pet%27s+name%3F&userq1=&answer1=111111&gnm=B6BD0024429E75EBA000C413B8F73345D1ABA42F5F6115435B499DD060705A8FBB52B3D835F7AC7D5FE2730DFD626EEB&word=535817&key=&lang=en
- -----------------------------------------------------------------
-
-
- POST /register/index.php HTTP/1.1
- Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash,
application/msword, application/x-ms-application, application/x-ms-xbap,
application/vnd.ms-xpsdocument, application/xaml+xml, */*
- Referer: https://www.icq.com/register/index.php
- Accept-Language: ru
- Content-Type: application/x-www-form-urlencoded
- UA-CPU: x86
- Accept-Encoding: gzip, deflate
- User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
- Host: www.icq.com
- Content-Length: 391
- Connection: Keep-Alive
- Cache-Control: no-cache
- Cookie: geo=7; icq_ln=1148E273F0D2315B2644E911E88848C6D178E42885451037E73DB38B81DDD3C1; s_cc=true;
s_sq=aolwpicq%2Caolsvc%3D%2526pid%253Dicq%252520%25253A%252520Help%252520-%252520Registration%252520-%252520Index%252520%252528Error%25252020%252529%2526pidt%253D1%2526oid%253DSubmit%2526oidt%253D3%2526ot%253DSUBMIT%2526oi%253D373;
icq_lang=ru
-
- service=30&lg_id=&qtype=&icq_ln=442FC1F64BCA0ADA701F0F8479A1EC354F74221F1FF2B22A72A011A704A2E55F&nickname=somenick&fname=&lname=&email=somenick93251@yandex.ru&gender=0&age=13&password=222222&password_confirm=222222&qa1=What+is+your+pet%27s+name%3F&userq1=&answer1=111111&gnm=9661A194A2FA78481C67F43AFF50AFA348B722B9F1DF9E4B728EDB139B9C15DF932F9B087C941D6FF5B7A0900338079C&word=814585&key=&lang=en
-
-
-
- ------------------------------------------------------------------------
- HTTP/1.0 302 Found
- Date: Thu, 19 Mar 2009 04:48:30 GMT
- Server: Apache
- Cache-Control: no-store, no-cache, must-revalidate
- Set-Cookie: karma_user_572202118=ICQ%23+572202118; expires=Fri, 19-Mar-2010 04:48:30 GMT; path=/;
domain=.icq.com
- Set-Cookie: karma_login=572202118; expires=Fri, 19-Mar-2010 04:48:30 GMT; path=/; domain=.icq.com
- Set-Cookie:
karma_session=93E2939E12221F73E955D8CDC65BCD5CE3FB4614000319085B41838F85E3144F2063D18EDEF4FE747825C7C0A64CE47B55C89247D5BB61F1B8F583760177D676DF33D5B66D7531CB7B932E0BAE787F8FEEC871F0AEF73018CF63E0BDB2D82C0AF5E476976F7930A26E46726A389D80D185EB964DE81BD945FCD9787FF36A5CE3225475AF6739FDF8B9EDAC1E9B5A4192;
expires=Fri, 19-Mar-2010 04:48:30 GMT; path=/; domain=.icq.com
- Location:
/register/thanks.php?service=30&uin=572202118&email=somenick93251%40yandex.ru&newuser=1&lg_id=&lang=en&key=
- P3P: CP="ONL UNI COM PHY NAV INT DEM CURo OUR"
- Connection: close
- Content-Type: text/html
-
-
- ---------------------------------------------------------------------------------------------------------
-
-
-
-
-
-
 |
Вопрос задал: CrazyDream (статус: Посетитель)
Вопрос отправлен: 19 марта 2009, 09:21
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, CrazyDream!
Реализация ssl в Инди интересна. Наверное заметили, что для корректной работы с ссл вашему приложению нужно две dll. А теперь главная проблема: надо длл строгой версии и скомпилированые специально для инди. Я в свое время мучился. Доходило до ручной сборки длл - так как определённых случаях вылетало с самими странными ошибками.
Тогда я перешел на Synapse - это легковесная библиотека, которая может легко использовать "правильные версии ссл библиотек", которые по умолчанию есть в системе. Для запроса по ссл не нужно даже напрягаться - просто вместо http пишем https и всё. Остальное библиотека сама сделает. На сайте есть моя коротенькая статья (Synapse) по этой теме с примерами и сорцами.
Попробуйте, работает прелестно.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 19 марта 2009, 10:04
Оценка за ответ: 5
Комментарий к оценке: попробую другие либы, потом если не выйдет - Synapse :) сам только с 4ого раза подобрал библиотеки Инди, с котороми моя 6-ая версия вобще согласилась работать.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 19 марта 2009, 11:37; участников в обсуждении: 2.
|
CrazyDream (статус: Посетитель), 19 марта 2009, 10:02 [#1]:
есть предположение, что нужно как-то к моему приложению привинтить сертификат..
дело в том, что на том месте, где вылетает прога Сайт - в ультимативной форме - требует нажать кнопочку "Оекй" с подтверждением того, что я таки *хочу* соединиться через его, выданный самому себе, сертификат.
Этот сертификат - www.icq.com AOL Member CA - даже установлен у меня в браузере в разделе "Сертификаты-другие пользователи".
Может быть его как-то можно привинтить к программе?
В общем по прошествии суток нон-стоп шаманских танцев и лазанья по инету я в ступоре.) Ложусь спать, как проснусь попробую:
1.другие версии библиотек ОпенССЛ
2.прочесть всю ветку вашего форума, касающаюся протоколов и сетей.
а дальше - как в анекдоте: "Ежик упал в яму в лесу, ходит по ней кругами, ходит.. Думает - блин, если еще 2 часа так и не придумаю, как отсюда вылезли - пойду домой за лесницей!" xDD
|
|
Вадим К (статус: Академик), 19 марта 2009, 10:06 [#2]:
а с сертификатом это здравая идея.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
CrazyDream (статус: Посетитель), 19 марта 2009, 11:25 [#3]:
пробовал экспортировать сертификат из хранилища в файл *.cer - SSL компонент отказывается его признавать ни за cert, ни за key, ни за rootcert.
при этом как я понял, там нужны Ключ и Сертификат, чтобы все нормально работало.. в общем каких-либо faq-ов по теме нет, а собирать по кусочкам, да еще и в большинстве на английском - не так уж и просто=\
да и вобще, ИндиИнДепс утверждает, что "проверять сертификаты - обязанность пользователя" - типа она ничего такого не проверяет, и принимает все серты молча. тьфу.
1. по очереди все либы +- 2 версии.
2. синапс
канеш в идеале бы перекомпилить библиотеки инди.. но это все равно что строить несколько-километровый водопровод из-за того, что хочется пить=))
буду отрабатывать варианты от простого к сложному. Спс Вадим.
|
|
Вадим К (статус: Академик), 19 марта 2009, 11:37 [#4]:
если один юнит портит всё картину, то не обязательно перекомпилировать всё. есть более правильный подход. Нужный pas файл копируется в папку с программой и правиться. Делфи будет подхватывать его с папки с проектом. Работает практически всегда.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|