Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SSL Authentifizierung mittels PEM Datei (https://www.delphipraxis.net/176459-ssl-authentifizierung-mittels-pem-datei.html)

duff 6. Sep 2013 11:07

SSL Authentifizierung mittels PEM Datei
 
Hallo Zusammen,

in einem derzeitigen Projekt muss ich mit einer verschlüsselten SOAP-Schnittstelle kommunizieren.

Dazu habe ich vom Anbieter der Schnittstelle eine .pem und .pfx Datei vorliegen.

Da ich noch nicht mit Zertifikaten gearbeitet habe, würde ich mich über hinweise freuen, wie ich die Datei(en) richtig verwende um mich bei der Schnittstelle auch richtig authentifizieren zu können.

Bei meinen (nicht erfolgreichen) Versuchen habe ich die TIdHTTP und TIdSSLIOHandlerSocketOpenSSL Komponenten bemüht.

Schon einmal vielen Dank und Gruß

CCRDude 6. Sep 2013 11:20

AW: SSL Authentifizierung mittels PEM Datei
 
Wenn du uns kurz umreisst, was Du versucht hast und wo es nicht erfolgreich war, wäre eine Hilfe sicherlich einfacher, denn alles von Grund auf zu erklären wäre dann ja ggfls. gar nicht nötig, während die Frage jetzt so generell gehalten ist, dass mir z.B. gerade die Zeit zum Antworten fehlt.

mjustin 6. Sep 2013 11:37

AW: SSL Authentifizierung mittels PEM Datei
 
Für die Authentifizierung spielt SSL eigentlich keine Rolle. Normalerweise wird erst die Verbindung mit SSL hergestellt, und dann kommt die Anmeldung über den verschlüsselten Kanal.

Welches Authentifizierungsverfahren wird denn benutzt (Basic, NTLM, Digest, Kerberos)? Das ist im HTTP Header beim Verbindungsaufbau zu sehen.

Kann man mit einem Webbrowser die Service URL öffnen und sieht etwas (zumindest eine Fehlermeldung des Servers)?

duff 6. Sep 2013 11:41

AW: SSL Authentifizierung mittels PEM Datei
 
Ja klar. Ich versuche mal etwas genauer zu sein.

Was ich bisher habe:
- libeay32.dll und ssleay32.dll befinden sich im Programmverzeichnis

Und wenn folgender Code ausgeführt wird bei der Zeile

Delphi-Quellcode:
IdHTTP1.POST
eine Exception ausgelöst mit folgendem Hinweis:

"Stammzertifikat konnte nicht geladen werden"

Delphi-Quellcode:
const
  baseURLevent: string = 'https://meineURL.com:11851';

LoadOpenSSLLibrary;
slPost := TStringList.Create;

tmpStr := ExtractFilePath(ParamStr(0))+'zertifikat.pem';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.RootCertFile := tmpStr ;

stringStream := TStringStream.Create(slPost.Text);

postResult := IdHTTP1.POST(baseURLevent, stringStream);
EDIT:

Folgendes wird im Browser angezeigt wenn die URL dort öffnen möchte.

Code:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
  <S:Fault xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
    <faultcode>S:Client</faultcode>
    <faultstring>
      Couldn't create SOAP message due to exception: XML reader error: com.sun.xml.stream.XMLStreamException2: ParseError at [row,col]:[1,1] Message: Premature end of file.
    </faultstring>
  </S:Fault>
</S:Body>
</S:Envelope>
Base ist das Authentifizierungsverfahren.

EDIT 2:

Ich habe nun versucht einfach mal die URL ohne das Zertifikat zu benutzen.

Folgende Exception ist das Ergebnis:

Delphi-Quellcode:
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

mjustin 6. Sep 2013 12:13

AW: SSL Authentifizierung mittels PEM Datei
 
Ist SSLOptions.RootCertFile sicher die richtige Property? Unter http://www.delphipraxis.net/169295-h...tifikaten.html sieht man im Beispielquelltext noch weitere

Delphi-Quellcode:
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.RootCertFile:= ...
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.CertFile:= ...
  FIdSSLIOHandlerSocketOpenSSL.SSLOptions.KeyFile:= ...

RootCert verstehe ich als ein übergeordnetes Zertifikat (vermutlich optional).

Siehe auch Beispiel unter

http://www.delphipraxis.net/138951-i...gsproblem.html

duff 9. Sep 2013 13:18

AW: SSL Authentifizierung mittels PEM Datei
 
Leider bin ich noch nicht viel weiter gekommen.

Momentan binde ich die .pem Datei (Inhalt RSA PRIVATE KEY) als SSLOptions.KeyFile ein.

Außerdem habe ich mir das über die .pfx Datei installierte Zertifikat als .CER Datei(Base-64 Codiert,Inhalt: BEGIN CERTIFICATE....) aus dem Internet-Explorer exportiert.
Diese Datei binde ich als SSLOptions.CertFile ein.

Die Logs der OpenSSL Status Info sagen folgendes. Außerdem wird eine Exception SSL3_GET_SERVER_CERTIFICATE:certificate verify failed ausgelöst.

Code:
SSL-Status: "before/connect initialization"
SSL-Status: "before/connect initialization"
SSL-Status: "SSLv3 write client hello A"
SSL-Status: "SSLv3 read server hello A"
SSL-Status: "SSLv3 read server certificate B"
SSL-Status: "SSLv3 read server certificate B"
Hat jemand noch einen heißen Tipp für mich?

mjustin 9. Sep 2013 16:03

AW: SSL Authentifizierung mittels PEM Datei
 
Zitat:

Zitat von duff (Beitrag 1227714)

Hat jemand noch einen heißen Tipp für mich?

SoapUI für Tests verwenden (vom gleichen Rechner aus). Wenn es damit funktioniert, kann man sicher sein es - prinzipiell - auch mit anderen SOAP Frameworks oder direkt über einen HTTP Client funktioniert.

SoapUI ist praktisch die Referenz, und wenn man seinen HTTP traffic aufzeichnet (ja, das geht auch mit HTTPS im Klartext - siehe Fiddler), kann man den HTTP Traffic mit dem von Delphi erzeugten vergleichen um die Unterschiede zu finden.

SoapUI setzt eine Java Runtime voraus.

duff 17. Sep 2013 14:10

AW: SSL Authentifizierung mittels PEM Datei
 
Zitat:

Zitat von mjustin (Beitrag 1227739)
Zitat:

Zitat von duff (Beitrag 1227714)

Hat jemand noch einen heißen Tipp für mich?

SoapUI für Tests verwenden (vom gleichen Rechner aus). Wenn es damit funktioniert, kann man sicher sein es - prinzipiell - auch mit anderen SOAP Frameworks oder direkt über einen HTTP Client funktioniert.

SoapUI ist praktisch die Referenz, und wenn man seinen HTTP traffic aufzeichnet (ja, das geht auch mit HTTPS im Klartext - siehe Fiddler), kann man den HTTP Traffic mit dem von Delphi erzeugten vergleichen um die Unterschiede zu finden.

SoapUI setzt eine Java Runtime voraus.

Hallo mjustin, also mit SoapUI funktioniert es. Anscheinend bin ich mit meinem Lösungsansatz auf dem Holzweg. :pale:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 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