Конференция "Сети" » Как получить детали отклоненного запроса - IdHTTPServer+OpenSSL ? [D7, WinXP]
 
  • laao (31.07.08 13:01) [0]
    Delphi 7, IdHTTPServer, IdServerIOHandlerSSLOpenSSL, OpenSSL  0.9.8g (или 0.9.6m, не принципиально)

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

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

    если запрос, не прошедший проверку, все же пропустить принудительно и установить некий флаг отказа, то потом текст запроса можно получить в IdHTTPServer.CommandGet. но нет никакой гарантии, что при большом количестве запросов они будут поступать на эти обработчики в одном и том же порядке :(
  • Slym © (31.07.08 13:04) [1]
    laao   (31.07.08 13:01)
    и результат его проверки библиотекой OpenSSL. никакие данные самого HTTP запроса в этом обработчике не доступны

    Правильно, т.к. до HTTP запроса еще не дошло...
    Чтобы дошло до HTTP запроса нужен "правильный" сертификат
  • Slym © (31.07.08 13:06) [2]
    Slym ©   (31.07.08 13:04) [1]
    Сначала устанавливается шифрованный SSL тунель (но ты его обрываешь в OpenSSLVerifyPeer), а уж потом по тунелю идут данные - в твоем случае HTTP запрос\ответ
  • laao (31.07.08 13:20) [3]
    Slym

    я понимаю. но я готов в OpenSSLVerifyPeer пропускать далее все запросы, но как мне "пометить" те, которые не прошли проверку сертификатов, чтобы в дальнейшем отловить их в IdHTTPServer.CommandGet ?
  • Slym © (31.07.08 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 (31.07.08 14:23) [5]
    спасибо !

    у меня indy 10.1.5

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

    соответственно, обращаюсь к сертификату так - (AContext.Connection.Socket as TIdSSLIOHandlerSocketOpenSSL).SSLSocket.PeerCert. ....
 
Конференция "Сети" » Как получить детали отклоненного запроса - IdHTTPServer+OpenSSL ? [D7, WinXP]
Есть новые Нет новых   [134433   +21][b:0][p:0]