Entwickler-Ecke

Internet / Netzwerk - Probleme mit Indy10 IdHTTP und SSL


jonas_hirner - So 05.03.06 16:50
Titel: Probleme mit Indy10 IdHTTP und SSL
Hallo,
Nachdem ich hier im Forum immer nur fleissig gelesen habe,
muss ich jetzt selber mal Vorschläge zur Problemlösung einholen :) .
Über die Suchfunktion habe ich leider nichts gefunden was geholfen hat.

Ich versuche mit der IdHTTP Komponente (Indy 10 von Delphi2006Pro) per
POST und GET mit einem HTTPS, also SSL Server zu kommunizieren.

Dazu habe ich die OpenSSL Librarys und ein Zertifikat in mein Programmverzeichnis kopiert, eine IdHTTP Komponente und eine IdSSLIOHandlerSocketOpenSSL Komponente
auf der Form platziert und einige Einstellungen verändert:

IdHTTP:
- IOHandler= IdSSLIOHandlerSocketOpenSSL
- HandleRedirects= True

IdSSLIOHandlerSocketOpenSSL:
- CertFile= SSLCert.cer
- Method= sslvSSLv23
- Mode= sslmClient
- VerifyDepth= 2

Wenn ich jetzt mit GET oder POST den HTTPS Server kontaktiere erhalte ich jedes mal
einen "Read Timeout." Fehler.
Der Server den ich benutzt habe ist https://login.web.de/ (für eine automatische
Anmeldung)

Beispiel:

Quelltext
1:
2:
3:
4:
5:
 HTTPParam:= TStringStream.Create('');
 HTTPParam.WriteString('username=name');
 HTTPParam.WriteString('&password=passwort');

 FormMain.IdHTTP.Post('http://login.web.de/intern/login/?', HTTPParam);


Ich hoffe ihr könnt mir weiterhelfen rauszufinden was die Ursache für diese Fehlermeldung ist.

Grüsse aus München
jonas


GTA-Place - So 05.03.06 19:14


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  Params:  TIdMultiPartFormDataStream;
begin
  Params := TIdMultiPartFormDataStream.Create;

  Params.AddFormField('a''Foo');
  Params.AddFormField('b''Bla');
  Params.AddFormField('c''Blup');

  idHTTP1.Post('http://www.123.de/myscript.php', Params);

  Params.Free;
end;

Versuchs mal so (uses IdMultiPartFormData).


jonas_hirner - So 05.03.06 20:34

Macht keinen Unterschied. Genau der gleiche Fehler "Read Timeout".
Wenn ich mein Programm an einem normalen HTTP Server ohne SSL ausprobiere
funktioniert auch alles ohne probleme.


GTA-Place - So 05.03.06 20:36

Hilft das?:
http://www.intelicom.si/domcms.nsf/web/en.products001.html


jonas_hirner - So 05.03.06 20:45

thx für den link, auf der seite war ich zwischendurch auch mal.
Die ist aber noch für Indy 9, die beschriebenen komponenten gibt
es in v10 leider nicht mehr. :(


GTA-Place - So 05.03.06 20:49

Hab grad folgendes gefunden:
Zitat:
SSL Core

The SSL capabilities of Indy 10 are now completely pluggable. Prior to Indy 10, the SSL support was pluggable at the TCP level, however protocols such as HTTP which used SSL for HTTPS were fixed to use Indy's default SSL implementation of OpenSSL.

Indy 10 continues to include support for OpenSSL, however the SSL capabilities of Indy are completely pluggable at the core and protocol level for other implementations.

SSL and other encryption methods are in the works from both the third parties SecureBlackbox and StreamSec.

SSL Protocols

Indy 10 now supports both implicit TLS and explicit TLS in the following clients and servers:

· POP3
· SMTP
· FTP
· NNTP
· IMAP4

Weiß nicht, ob das was hilft.


Wieso willst du dich denn einloggen auf Web.de?


jonas_hirner - So 05.03.06 20:57

web. de war nur ein beispiel. Der Fehler kommt bei jedem SSL gesicherten server.
Ich habe gerade gesehen dass ich wohl nicht der einzige mit diesem Problem bin:

http://www.delphi-forum.de/viewtopic.php?t=50430&start=4

Vielleicht ein Bug in Delphi2006Pro?


MAlsleben - Di 07.03.06 23:40

Hi,

im Entwicklermagazin 01/06 war eine Demo von Daniel Wischnewski für Indy mit SSL dabei. Die hat zumindest funktioniert.
Auf jeden Fall kann diese Zeile von Dir:


Delphi-Quelltext
1:
 FormMain.IdHTTP.Post('http://login.web.de/intern/login/?', HTTPParam);                    


nicht funktionieren, es muß



Delphi-Quelltext
1:
 FormMain.IdHTTP.Post('https://login.web.de/intern/login/?', HTTPParam);                    


heissen.


Gruß Micha

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt, Highlight-Tag gesetzt


jonas_hirner - Mi 08.03.06 10:22

Danke für den Tip, macht leider auch keinen Unterschied. Genau der gleiche Fehler.

GET oder ein anderer Server funtionieren übrigens genausowenig.

Bsp.:


Delphi-Quelltext
1:
IdHTTP.GET('https://king.com/');                    


gibt auch einen Read Timeout.

könntest du vielleicht die EInstellungen von IdHTTP und dem IOHandler schreiben
die in der Demo verwendet wurden?

Grüsse

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


MAlsleben - Mi 08.03.06 11:25

Hi,

die Demo gibt es hier http://www.entwickler-magazin.de/zonen/magazine/ausgaben/psfile/source_file/6/wischnewsk439d846ca9eb7.zip zum runterladen.

Gruß Micha.


jonas_hirner - Mi 08.03.06 21:32

Hi,
danke für den Link. Wenn ich die vorkompilierte exe von der
Demo ausführe funktioniert alles problemlos, aber wenn ich das
ganze selber kompiliere bekomme ich wieder den "Read Timeout" Fehler.

Wird wohl doch ein Bug von Delphi sein oder evtl. der Indy Komponente.
Steht im Entwicklermagazin mit was für eine Delphi Version/ Indy Version
verwendet wurde?

Grüsse


MAlsleben - Mi 15.03.06 22:55

Hi,


mit Delphi 2005.

Gruß Micha.