Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi SSL mit TidPOP3 (https://www.delphipraxis.net/108942-ssl-mit-tidpop3.html)

OlloSoft 21. Feb 2008 15:52


SSL mit TidPOP3
 
Hi Leute,

ich möchte E-Mails mit der Indy (10) Komponente TidPOP3 empfangen und dabei SSL verwenden.

Die verknüpfte TIdSSLIOHandlerSocketOpenSSL Komponente funtioniert zwar, wenn ich bei den SSLOptions
.Mode = sslmUnassigned
setze, doch bei
.Mode = sslmServer
schlägt der TLS Handshake fehl -> Exception.

Was muss ich (zusätzlich) einstellen?

Für ausführliche Hinweise - evtl. auch weiterführende Info zum Thema SSL - wäre ich sehr dankbar.

Dani 21. Feb 2008 15:56

Re: SSL mit TidPOP3
 
Welche Exception genau?

Du musst der SSl-Komponente vorher ein Zertifikat zuweisen, außerdem musst du dir von externer Quelle noch gewisse DLLs besorgen (afaik).

OlloSoft 22. Feb 2008 07:55

Re: SSL mit TidPOP3
 
Hi Dani,

die OpenSSL Libraries libeay32.dll, libssl32.dll und ssleay32.dll liegen im Programmverzeichnis und werden dort auch gefunden.

Die Exception "Error connecting with SSL" tritt auf in der procedure TIdSSLSocket.Connect() und wird durch den Rückgabewert der function IdSslConnect() ausgelöst ->
EIdOSSLConnectError.Create(RSSSLConnectError), wobei der TIdStackSocketHandle-Parameter einen Wert <> 0 hat.

Benötige ich für einen einfachen TLS Handshake denn ein lokales Certificate?

Dani 22. Feb 2008 21:20

Re: SSL mit TidPOP3
 
Wie sieht denn das IdSSLIOHandlerSocketOpenSSL.OnVerifyPeer Event aus? Und wie die SSLOptions-Eigenschaft?

Ich konnte den Fehler zwischenzeitlich mal reproduzieren, aber jetzt bekomme ich AVs in libeay32.dll beim Verbinden. Muss mal schauen, ob das nach einem Neustart weg ist.

Zitat:

Benötige ich für einen einfachen TLS Handshake denn ein lokales Certificate?
Nein, mein Fehler :oops:

OlloSoft 25. Feb 2008 08:41

Re: SSL mit TidPOP3
 
Hi Dani,

Delphi-Quellcode:
// Properties der TIdPOP3 Komponente
IOHandler = IdSSLIOHandlerSocketOpenSSL
Port     = 995
UseTLS   = utUseImplicitTLS

// Properties der TIdSSLIOHandlerSocketOpenSSL Komponente
Port                  = 995
DefaultPort           = 0
SSLOptions.Method     = sslvSSLv3
SSLOptions.Mode       = sslmServer // <- stelle ich dies auf sslmUnassigned funktioniert
                                     //    der ServerConnect, allerdings ohne TLS Handshake(?!?)
SSLOptions.VerifyMode = []
SSLOptions.VerifyDepth = 0


// Sind die Einstellungen für einen TLS Handshake OK?
// Was müsste ich ändern?




// OnVerifyPeer Event
function TForm4.IdSSLIOHandlerSocketOpenSSLVerifyPeer(Certificate: TIdX509; AOk: Boolean): Boolean;
begin
  asm int 3 end;  // <- Dieser Haltepunkt wird nie erreicht.
                   //    Die Exception "Error connecting with SSL" wird vorher schon ausgelöst.
  AOK   := True;
  Result := True;
end;

Dani 25. Feb 2008 21:05

Re: SSL mit TidPOP3
 
Ich glaube SSLOptions.Mode müsste sslmClient sein, denn unsere Rolle und damit die des IOHandlers ist die des Clients. SSLOptions.VerifyMode sollte wenigstens sslvrfPeer enthalten, denn wir wollen ja, dass sich unser Gegenüber (der Server) per Zertifikat identifiziert. Dazu dürfte in der Doku allerdings gerne mehr stehen als sinngemäß "das ist eine Aufzählung der möglichen Modi" (ach nee :evil:)

Jedenfalls wird mit diesen Einstellungen wenigstens schonmal OnVerify aufgerufen. Das Zertifikat von pop.mail.yahoo.com hat danach den Fingerprint 1A:DB:9F:FE:D8:33:3E:08:C5:3E:7B:9C:31:FE:09:4A.

Direkt nach dem Verifizieren raucht allerdings immer noch die libeay32.dll mit einer AV ab. :(

Assertor 11. Mär 2008 16:45

Re: SSL mit TidPOP3
 
Hallo Ollosoft,

da muß ich mich mal einschalten.

Was für ein Chaos: Warum -drei- DLLs? Du hast Dir meine OpenSSL Patches geladen, richtig? Verwendest Du die Indy10 von der Delphi Installation oder aus dem SVN?

Bitte überprüfe auch, ob die richtige IdSSLOpenSSLHeaders.pas in deinem Projektverzeichnis liegt bzw. vom Compiler gefunden und genutzt wird.

Eine AV darf es da nicht geben.

Du hast also wahrscheinlich einen Mix aus alter und neuer DLL, weil Dein Compiler die alte IdSSLOpenSSLHeaders.pas nutzt (und daher nach der ssleay32.dll fragt).

Momentdan heißen die gepatchten DLLs: libeay32.dll und libssl32.dll. Dies wird von der gepatchten IdSSLOpenSSLHeaders.pas berücksichtigt.

Ich werde auf Wunsch wieder zur alten (Delphi) Namensgebung zurückkehren, wobei meine der OpenSSL Sourcen entspricht...

Aber: Ich sehe im Moment öfter bei Verkaufssoftware, Exchange-Tools z.B., das 3 DLLs verwendet werden. Das ist definitiv falsch!

Gruß Assertor

:dp:

Dani 11. Apr 2008 01:25

Re: SSL mit TidPOP3
 
Habe Delphi neu installiert und siehe da keine AVs mehr, kann sogar die unmodifizierten OpenSSL-DLLs benutzen (verwende jetzt den FPC Build).


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 Uhr.

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