Вниз
Скачать: CL | DM;

Как получить детали отклоненного запроса - IdHTTPServer+OpenSSL ?   Найти похожие ветки 

← →
laao   (2008-07-31 13:01) [0]

Delphi 7, IdHTTPServer, IdServerIOHandlerSSLOpenSSL, OpenSSL  0.9.8g (или 0.9.6m, не принципиально)

цель - если запрос был отклонен при проверке сертификата, нужно сохранить информацию о нем - IP и содержание запроса

насколько я понимаю, для ручной проверки сертификата можно использовать событие OpenSSLVerifyPeer компонента IdServerIOHandlerSSL. но в качестве входных параметров там только сертификат и результат его проверки библиотекой OpenSSL. никакие данные самого HTTP запроса в этом обработчике не доступны

если запрос, не прошедший проверку, все же пропустить принудительно и установить некий флаг отказа, то потом текст запроса можно получить в IdHTTPServer.CommandGet. но нет никакой гарантии, что при большом количестве запросов они будут поступать на эти обработчики в одном и том же порядке :(


← →
Slym ©   (2008-07-31 13:04) [1]

laao   (31.07.08 13:01)
и результат его проверки библиотекой OpenSSL. никакие данные самого HTTP запроса в этом обработчике не доступны

Правильно, т.к. до HTTP запроса еще не дошло...
Чтобы дошло до HTTP запроса нужен "правильный" сертификат


← →
Slym ©   (2008-07-31 13:06) [2]

Slym ©   (31.07.08 13:04) [1]
Сначала устанавливается шифрованный SSL тунель (но ты его обрываешь в OpenSSLVerifyPeer), а уж потом по тунелю идут данные - в твоем случае HTTP запрос\ответ


← →
laao   (2008-07-31 13:20) [3]

Slym

я понимаю. но я готов в OpenSSLVerifyPeer пропускать далее все запросы, но как мне "пометить" те, которые не прошли проверку сертификатов, чтобы в дальнейшем отловить их в IdHTTPServer.CommandGet ?


← →
Slym ©   (2008-07-31 13:39) [4]

версия Indy какая?
если дефолтовая 9 то навскидку так
procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
 ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
 if AThread.Connection.Socket is TIdSSLIOHandlerSocket then
   TIdSSLIOHandlerSocket(AThread.Connection.Socket).SSLSocket.PeerCert.Subject
end;


← →
laao   (2008-07-31 14:23) [5]

спасибо !

у меня indy 10.1.5

метод IdHTTPServer выглядит так - IdHTTPServerCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

соответственно, обращаюсь к сертификату так - (AContext.Connection.Socket as TIdSSLIOHandlerSocketOpenSSL).SSLSocket.PeerCert. ....



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.054 c
2-1269465853
Дмитро
2010-03-25 00:24
2010.08.27
Шифровка!


2-1270531127
Knob
2010-04-06 09:18
2010.08.27
Проблема с ActiveX


15-1266528605
Юрий
2010-02-19 00:30
2010.08.27
С днем рождения ! 19 февраля 2010 пятница


15-1273053437
'<>
2010-05-05 13:57
2010.08.27
Разложение числа на множители.


15-1274862762
ocean
2010-05-26 12:32
2010.08.27
Печать картинок




   Наверх