Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi INDY 9 und SSL (https://www.delphipraxis.net/139283-indy-9-und-ssl.html)

night 26. Aug 2009 04:28


INDY 9 und SSL
 
Hallo,

ich benutze Turbo Delphi 2006 und INDY9.
Ich habe schon richtig viele Threads durchgelesen und viel ausprobiert, aber ich bekomme es nicht zum laufen.
Ich erhalte immer nur die Meldung "Exception-Klasse EIdOSSLCouldNotLoadSSLLibrary mit Meldung 'Could not load SSL library.'"

Ich habe schon verschiedene DLL'S runtergeladen, aber ich es läuft einfach nicht :(
Endweder sind die DLL nur für INDY 10 oder ich muss eine IdSSLOpenSSLHeaders.pas in ein Verzeichnis kopieren, das es bei mir nicht gibt.

Wäre super, wenn mir jemand helfen könnte :)

Mein Codingb:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  idSSL := TIdSSLIOHandlerSocket.Create(self);
  idSSL.SSLOptions.CertFile    := 'ra.cer';
  idSSL.SSLOptions.VerifyDepth := 2;
  idSSL.SSLOptions.Mode        := sslmClient;
  idSSL.SSLOptions.Method      := sslvSSLv23;

  idHttp := TidHttp.Create(self);
  idHttp.Request.ContentType   := 'application/x-www-form-urlencoded ';
  idHttp.IOHandler             := self.idSSL;
  idHttp.AllowCookies          := true;
  idHttp.HandleRedirects       := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  list: TStringlist;
begin
  list:=TStringList.Create;
  try
    list.Add('login='+TIdURI.ParamsEncode(ENick.Text));
    list.Add('password='+TIdURI.ParamsEncode(EPw.Text));
    Memo1.Lines.Add(idHttp.Post(API_LOGIN,list));
  finally
    sList.Free;
  end;
end;
Das muss doch auch mit INDY 9 möglich sein.

Viele Grüße
Stefan

jaenicke 26. Aug 2009 05:21

Re: INDY 9 und SSL
 
Warum ersetzt du nicht einfach deine Indy-Version durch die neuere Version 10? Indy 9 ist ja seit 5 Jahren nicht mehr aktualisiert worden...

Und für Indy 10 musst du ja nur die Zip-Datei herunterladen (z.B. von hier) und den Bibliothekspfad auf lib\indy9 entfernen und stattdessen die Pfade hinzufügen, in denen die neuen entpackten Dateien liegen.

Die OpenSSL-DLLs findest du u.a. hier.

Zitat:

Zitat von night
Das muss doch auch mit INDY 9 möglich sein.

Mag sein, du kannst es mit den DLLs ja versuchen (oder mit debuggen wo genau das Problem liegt), aber was gibt es für einen Grund noch Indy 9 zu benutzen? :roll:

night 26. Aug 2009 06:24

Re: INDY 9 und SSL
 
Wow super, um die Zeit habe ich gar nicht mit einer Antwort gerechnet :)

Auf welchen Pfad muss ich das genau ändern? Ich habe verschiedenes getestet, aber es kommt immer nur:
Datei nicht gefunden: 'IdSSLOpenSSL.dcu'

Wenn ich einfach Indy9 durch Indy10 ersetze, das ist im selben Ordner schon vorhanden, dann kommt:
Undefinierter Bezeichner: 'TIdSSLIOHandlerSocket'

Viele Grüße
Stefan

jaenicke 26. Aug 2009 07:21

Re: INDY 9 und SSL
 
Also, wenn du Indy 10 entpackst, dann hat dieses ja verschiedene Unterordner. Die Ordner Core, Protocols, Security, SuperCore und System habe ich in den Bibliothekspfad aufgenommen. Ob man die immer alle braucht, weiß ich nicht, jedenfalls funktioniert es so. :mrgreen:
Wichtig ist, dass der alte Pfad im Delphiverzeichnis nicht mehr im Pfad ist.

Im Code sieht das dann so aus (inkl. SSL und Cookies):
Delphi-Quellcode:
uses
  IdHttp, IdSSLOpenSSLHeaders, IdSSLOpenSSL, IdCookieManager;

procedure TFormX.ButtonXClick(Sender: TObject);
var
  IdHttpLoader: TIdHttp;
  SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;
  CookieManager: TIdCookieManager;
begin
  IdSSLOpenSSLHeaders.Load;

  SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create;
  try
    CookieManager := TIdCookieManager.Create;
    try
      IdHttpLoader := TIdHttp.Create;
      try
        IdHttpLoader.CookieManager := CookieManager;
        IdHttpLoader.IOHandler := SSLIOHandler;
        ...
Und im Verzeichnis der Exe befinden sich die libeay32.dll und die ssleay32.dll, weiter nix.

// EDIT:
Bei dir ist ja die Erzeugung der Objekte separat, du musst da statt deinem TIdSSLIOHandlerSocket ein TIdSSLIOHandlerSocketOpenSSL Objekt erstellen. Weil es ja um OpenSSL geht. Ob man das IdSSLOpenSSLHeaders.Load und hinterher das IdSSLOpenSSLHeaders.Unload braucht (oder ob es automatisch auch geht), weiß ich gerade nicht mehr. :D

night 26. Aug 2009 16:15

Re: INDY 9 und SSL
 
Hmm, das ganze scheint mit der Turbo Version nicht so ganz zu klappen.

Zitat:

Die Ordner Core, Protocols, Security, SuperCore und System habe ich in den Bibliothekspfad aufgenommen.
Habe ich auch gemacht und ich habe den Pfad zu INDY9 rausgenommen.
Jetzt findet er die IdHttp, IdSSLOpenSSL nicht mehr und es kommt die Meldung

IdSSLOpenSSL.pas(861): E2003 Undefinierter Bezeichner: 'IdSslAddAllCiphers'
IdSSLOpenSSL.pas(862): E2003 Undefinierter Bezeichner: 'IdSslAddAllDigests'

Ich brauch glaub ich die Installationsdatei von Turbo Delphi, um die Indys ändern zu können, oder liege ich damit falsch?

jaenicke 26. Aug 2009 21:34

Re: INDY 9 und SSL
 
Zitat:

Zitat von night
Hmm, das ganze scheint mit der Turbo Version nicht so ganz zu klappen.

Doch, klappt bei mir problemlos.

Zitat:

Zitat von night
Jetzt findet er die IdHttp, IdSSLOpenSSL nicht mehr und es kommt die Meldung

Wie kann der Compiler die Datei nicht finden und gleichzeitig darin einen Fehler anzeigen? :shock:
Ich finde das in Indy 10 gar nicht diese Zeilen (ich lade einmal die aktuellste Version nochmal). :gruebel:

Bist du sicher, dass da nichts mehr von Indy 9 im Pfad ist?

night 27. Aug 2009 06:54

Re: INDY 9 und SSL
 
Hi,
so INDY 10 läuft jetzt. Ich wollte es über die Installexe ändern, das wollte es aber nicht(irgendwas mit choose radiobutton, hatte ich o_O). Deshalb habe ich es deinstalliert und wieder installiert und jetzt gehen die Indy10 :)

Jetzt kommt noch ein Read Timeout Fehler... aber das schau ich mir morgen an.

Zitat:

Zitat von jaenicke
Zitat:

Zitat von night
Jetzt findet er die IdHttp, IdSSLOpenSSL nicht mehr und es kommt die Meldung

Wie kann der Compiler die Datei nicht finden und gleichzeitig darin einen Fehler anzeigen? :shock:

Ja darüber hatte ich mich auch gewundert ... aber strg+linksklick ging nicht mehr und die waren rot unterstrichen...

jaenicke 27. Aug 2009 07:59

Re: INDY 9 und SSL
 
Zitat:

Zitat von night
Ja darüber hatte ich mich auch gewundert ... aber strg+linksklick ging nicht mehr und die waren rot unterstrichen...

Das ist egal. Es geht ausschließlich um das was der Compiler ausspuckt. Diese Unterstreichungen sind nur als Hinweise zu sehen, die sind öfter auch mal falsch. ;-)

Das mitgelieferte Indy 10 ist leider auch schon relativ alt und die mitgelieferte Version hat einen Fehler, der verhindert, dass du komprimierte Seiten abrufen kannst (um genau zu sein fehlt die entsprechende Unit). Aber wenn du das neue nicht zum Laufen bekommst, gehts ja nicht anders. Bei mir funktioniert die aktuelle Version problemlos mit Turbo Delphi in einem frischen virtuellen PC.

night 27. Aug 2009 23:14

Re: INDY 9 und SSL
 
Wärst du so nett und würdest mir mal zeigen, was du alles eingetragen hast?
(das n für neu hinter indy10 habe ich gemacht, also so heißt der Ordner ;) )
Ich habe folgendes:

Bibliothekspfad
Delphi-Quellcode:
$(BDS)\lib;$(BDS)\Imports;$(BDS)\indy10n\Lib\Protocols;$(BDS)\indy10n\Lib\System;$(BDS)\indy10n\Lib\SuperCore;$(BDS)\indy10n\Lib\Core
Sunchpfad
Delphi-Quellcode:
$(BDS)\source\Win32\vcl;$(BDS)\source\Win32\rtl\common;$(BDS)\source\Win32\rtl\sys;$(BDS)\source\Win32\rtl\win;$(BDS)\source\Win32\WebSnap;$(BDS)\source\ToolsAPI;$(BDS)\source\Win32\IBX;$(BDS)\source\Win32\Internet;$(BDS)\source\Win32\Property Editors;$(BDS)\source\Win32\soap;$(BDS)\source\win32\xml;$(BDS)\source\Win32\db;$(BDS)\source\Win32\Decision Cube;$(BDS)\indy10n\Lib;$(BDS)\indy10n\Lib\Protocols;$(BDS)\indy10n\Lib\System;$(BDS)\indy10n\Lib\SuperCore;$(BDS)\indy10n\Lib\Core
und Debug DCU Pfad

Delphi-Quellcode:
$(BDS)\lib\Debug;$(BDS)\indy10n\Lib\Protocols;$(BDS)\indy10n\Lib\System;$(BDS)\indy10n\Lib\SuperCore;$(BDS)\indy10n\Lib\Core
Ich habe schon hin und her probiert, aber die aktuellen Indys wollen nicht. Diese Fehler treten auf:
Delphi-Quellcode:
[Pascal Fehler] IdSSLOpenSSL.pas(861): E2003 Undefinierter Bezeichner: 'IdSslAddAllCiphers'
[Pascal Fehler] IdSSLOpenSSL.pas(862): E2003 Undefinierter Bezeichner: 'IdSslAddAllDigests'
[Pascal Fehler] IdSSLOpenSSL.pas(885): E2010 Inkompatible Typen: 'Integer' und 'Cardinal'
[Pascal Fehler] IdSSLOpenSSL.pas(1559): E2009 Inkompatible Typen: 'Unterschiede in der Aufrufkonvention'
[Pascal Fehler] IdSSLOpenSSL.pas(1580): E2010 Inkompatible Typen: 'Byte' und 'Char'
[Pascal Fehler] IdSSLOpenSSL.pas(1591): E2003 Undefinierter Bezeichner: 'TSSL_CTX_set_verify_callback'
[Pascal Fehler] IdSSLOpenSSL.pas(1596): E2035 Nicht genügend wirkliche Parameter
[Pascal Fehler] IdSSLOpenSSL.pas(2045): E2010 Inkompatible Typen: 'Byte' und 'Char'
[Pascal Fehler] IdSSLOpenSSL.pas(2045): E2010 Inkompatible Typen: 'PUInteger' und 'Cardinal'
[Pascal Fehler] IdSSLOpenSSL.pas(2055): E2003 Undefinierter Bezeichner: 'IdSslEvpSHA1'
[Pascal Fehler] IdSSLOpenSSL.pas(2055): E2010 Inkompatible Typen: 'Byte' und 'Char'
[Pascal Fehler] IdSSLOpenSSL.pas(2055): E2010 Inkompatible Typen: 'PUInteger' und 'Cardinal'
[Pascal Fehler] IdSSLOpenSSL.pas(2065): E2003 Undefinierter Bezeichner: 'IdSslEvpSHA224'
[Pascal Fehler] IdSSLOpenSSL.pas(2065): E2008 Inkompatible Typen
[Pascal Fehler] IdSSLOpenSSL.pas(2066): E2010 Inkompatible Typen: 'Byte' und 'Char'
[Pascal Fehler] IdSSLOpenSSL.pas(2066): E2010 Inkompatible Typen: 'PUInteger' und 'Cardinal'
[Pascal Fehler] IdSSLOpenSSL.pas(2074): E2003 Undefinierter Bezeichner: 'IdSslEvpSHA224'
[Pascal Fehler] IdSSLOpenSSL.pas(2074): E2008 Inkompatible Typen
[Pascal Fehler] IdSSLOpenSSL.pas(2083): E2003 Undefinierter Bezeichner: 'IdSslEvpSHA256'
[Pascal Fehler] IdSSLOpenSSL.pas(2083): E2008 Inkompatible Typen
[Pascal Fehler] IdSSLOpenSSL.pas(2084): E2010 Inkompatible Typen: 'Byte' und 'Char'
[Pascal Fehler] IdSSLOpenSSL.pas(2084): E2010 Inkompatible Typen: 'PUInteger' und 'Cardinal'
[Pascal Fehler] IdSSLOpenSSL.pas(2092): E2003 Undefinierter Bezeichner: 'IdSslEvpSHA256'
[Pascal Fehler] IdSSLOpenSSL.pas(2092): E2008 Inkompatible Typen
[Pascal Fehler] IdSSLOpenSSL.pas(2101): E2003 Undefinierter Bezeichner: 'IdSslEvpSHA386'
[Pascal Fehler] IdSSLOpenSSL.pas(2101): E2008 Inkompatible Typen
[Pascal Fehler] IdSSLOpenSSL.pas(2102): E2010 Inkompatible Typen: 'Byte' und 'Char'
[Pascal Fehler] IdSSLOpenSSL.pas(2102): E2010 Inkompatible Typen: 'PUInteger' und 'Cardinal'
[Pascal Fehler] IdSSLOpenSSL.pas(2110): E2003 Undefinierter Bezeichner: 'IdSslEvpSHA386'
[Pascal Fehler] IdSSLOpenSSL.pas(2110): E2008 Inkompatible Typen
[Pascal Fehler] IdSSLOpenSSL.pas(2119): E2003 Undefinierter Bezeichner: 'IdSslEvpSHA512'
[Pascal Fehler] IdSSLOpenSSL.pas(2119): E2008 Inkompatible Typen
[Pascal Fehler] IdSSLOpenSSL.pas(2120): E2010 Inkompatible Typen: 'Byte' und 'Char'
[Pascal Fehler] IdSSLOpenSSL.pas(2120): E2010 Inkompatible Typen: 'PUInteger' und 'Cardinal'
[Pascal Fehler] IdSSLOpenSSL.pas(2128): E2003 Undefinierter Bezeichner: 'IdSslEvpSHA512'
[Pascal Fehler] IdSSLOpenSSL.pas(2128): E2008 Inkompatible Typen
[Pascal Fehler] IdSSLOpenSSL.pas(2139): E2018 Record, Objekt oder Klassentyp erforderlich
[Pascal Fehler] IdSSLOpenSSL.pas(2139): E2017 Zeigertyp erforderlich
[Pascal Fehler] IdSSLOpenSSL.pas(2144): E2003 Undefinierter Bezeichner: 'IdSslX509GetSignatureType'
[Pascal Fehler] IdSSLOpenSSL.pas(2149): E2003 Undefinierter Bezeichner: 'IdSslOBJNid2ln'
[Pascal Fehler] IdSSLOpenSSL.pas(2176): E2003 Undefinierter Bezeichner: 'IdSslX509Free'
[Pascal Fehler] IdSSLOpenSSL.pas(2184): E2003 Undefinierter Bezeichner: 'PASN1_INTEGER'
[Pascal Fehler] IdSSLOpenSSL.pas(2188): E2003 Undefinierter Bezeichner: 'IdSslX509GetSerialNumber'
[Pascal Fehler] IdSSLOpenSSL.pas(2189): E2035 Nicht genügend wirkliche Parameter
[Pascal Fehler] IdSSLOpenSSL.pas(2190): E2029 ';' erwartet, aber 'ELSE' gefunden
[Pascal Fehler] IdSSLOpenSSL.pas(2192): E2003 Undefinierter Bezeichner: 'Result'
[Pascal Fehler] IdSSLOpenSSL.pas(2193): E2029 '.' erwartet, aber ';' gefunden
[Pascal Warnung] IdSSLOpenSSL.pas(2194): W1011 Text hinter dem abschließenden 'END.' wird vom Compiler ignoriert
[Pascal Fehler] IdSSLOpenSSL.pas(525): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdX509.RSubject'
[Pascal Fehler] IdSSLOpenSSL.pas(526): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdX509.RIssuer'
[Pascal Fehler] IdSSLOpenSSL.pas(527): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdX509.RnotBefore'
[Pascal Fehler] IdSSLOpenSSL.pas(528): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdX509.RnotAfter'
[Pascal Fehler] IdSSLOpenSSL.pas(529): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdX509.RFingerprint'
[Pascal Fehler] IdSSLOpenSSL.pas(530): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdX509.RFingerprintAsString'
[Pascal Fehler] IdSSLOpenSSL.pas(532): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdX509.GetVersion'
[Pascal Fehler] IdSSLOpenSSL.pas(553): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdSSLCipher.GetDescription'
[Pascal Fehler] IdSSLOpenSSL.pas(554): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdSSLCipher.GetName'
[Pascal Fehler] IdSSLOpenSSL.pas(555): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdSSLCipher.GetBits'
[Pascal Fehler] IdSSLOpenSSL.pas(556): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdSSLCipher.GetVersion'
[Pascal Fehler] IdSSLOpenSSL.pas(558): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdSSLCipher.Create'
[Pascal Fehler] IdSSLOpenSSL.pas(559): E2065 Ungenügende Forward- oder External-Deklaration: 'TIdSSLCipher.Destroy'
[Pascal Fehler] IdSSLOpenSSL.pas(581): E2065 Ungenügende Forward- oder External-Deklaration: 'EIdOpenSSLAPISSLError.RaiseException'
[Pascal Fehler] IdSSLOpenSSL.pas(592): E2065 Ungenügende Forward- oder External-Deklaration: 'EIdOpenSSLAPICryptoError.RaiseExceptionCode'
[Pascal Fehler] IdSSLOpenSSL.pas(593): E2065 Ungenügende Forward- oder External-Deklaration: 'EIdOpenSSLAPICryptoError.RaiseException'
[Pascal Fataler Fehler] IdAuthenticationNTLM.pas(77): F2063 Verwendete Unit 'IdSSLOpenSSL.pas' kann nicht compiliert werden

jaenicke 28. Aug 2009 04:06

Re: INDY 9 und SSL
 
Also, ich habe jetzt den virtuellen PC wieder zurückgesetzt, die aktuelle Version von Indy von http://indy.fulgan.com/zip/indy10.zip in ein Komponentenverzeichnis ausgepackt und den Bibliothekspfad durch diese neuen Verzeichnisse ersetzt. Und es funktionierte sofort problemlos.

Der Bibliothekspfad sieht so aus:
Code:
$(BDS)\lib;$(BDS)\Imports;L:\Delphi\Komponenten\Internet\indy10\Lib\Core;
L:\Delphi\Komponenten\Internet\indy10\Lib\Protocols;L:\Delphi\Komponenten\Internet\indy10\Lib\Security;
L:\Delphi\Komponenten\Internet\indy10\Lib\SuperCore;L:\Delphi\Komponenten\Internet\indy10\Lib\System
Mehr habe ich nicht verändert.

Da diese Fehlermeldung kommt:
Klick einmal in Zeile 204 in IdSSLOpenSSL mit rechts auf IdSSLOpenSSLHeaders und "Deklaration suchen" und schau einmal wo die dann geöffnete Datei liegt bzw. was darin in Zeile 7549 steht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz