Einzelnen Beitrag anzeigen

EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#1

HTTPRequest mit Indy und Zertifikaten

  Alt 10. Jul 2012, 13:51
Hallo,

nachdem ich mit Microsofts XMLHTTPRequester auf die Nase gefallen bin, versuch ich nun folgende Aufgabe mit Indy zu lösen:

Es geht also um ein HTTPRequest mit SSL und Zertifikaten auf Server- und Clientseite. Das Ganze muss dann auch noch über Proxys funktionieren.
Nach stundenlangem Lesen im Internet bin ich mir ziemlich sicher, dass Indy (10.5.5) dass auch kann; nur weiß ich noch nicht genau wie.

1. Das Client-Zertifikat ist korrekt installiert. In den Indy-SSLOptionen werden RootCertFile, Certfile und KeyFile angegeben. Drei Dateien scheinen mir eine zuviel zu sein. Ein weiteres Problem stellt die Tatsache dar, dass das Zertifikat ein Exportieren des privaten Schlüssels nicht zulässt (oder brauch ich den auch garnicht?).

2. Was hat es mit VerifyMode und VerifyPeer auf sich?

3. Meine bisherigen Erkenntnisse sehen wie folgt aus. Habe ich irgendetwas übersehen? (Übrigens habe ich noch ein unlösbares Problem: ich habe selber keinen Zugang zum Server und kann das Programm nur beim Kunden testen...)

Ich freue mich auf Eure Hinweise !

Delphi-Quellcode:
  List:=TStringList.Create;
  List.Add('Dummy');

  IdHTTP:=TIdHTTP.Create(nil);
  IdHTTP.Request.ContentType:='text/xml';
  IdHTTP.Request.CharSet:='utf-8';
  IdHTTP.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)';
  IdHTTP.Request.AcceptEncoding:='gzip, deflate';

  FIdSSLIOHandlerSocketOpenSSL:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.RootCertFile:=
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.CertFile:=
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.KeyFile:=
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.Method:=sslvSSLv3;
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode:=sslmClient;
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyMode:=
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyDepth:=

  FIdSSLIOHandlerSocketOpenSSL:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  FIdSocksInfo:=TIdSocksInfo.Create(nil);

  with FIdSocksInfo do
   begin
     Host:=aProxy; // 192.168.124.20
     Port:=aPort; // 8080
     Version:=svSocks5;
     Username:='';
     Password:='';
     Enabled:=True;
   end;

  FIdSSLIOHandlerSocketOpenSSL.TransparentProxy:=FIdSocksInfo;
  IdHTTP.IOHandler:=FIdSSLIOHandlerSocketOpenSSL;

  try
    ResponseStr:=IdHTTP.Post(aURL, List);
  except
    ShowMessage('Fehler');
  end;
  List.Free;
  IdHTTP.Free;

Geändert von TBx (14. Okt 2014 um 14:00 Uhr) Grund: code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat