AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL
Thema durchsuchen
Ansicht
Themen-Optionen

Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

Ein Thema von Hobbycoder · begonnen am 12. Jun 2019 · letzter Beitrag vom 14. Jun 2019
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#1

Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

  Alt 12. Jun 2019, 17:16
Hi,

weiß zufällig jemand, wie das SSL-Zertifikat, welches ich bei Let's Encrypt erstellt habe für den TIdServerIOHandlerSSLOpenSSL nutzbar machen kann?
Von Let's Encrypt habe ich .PFX erhalten.
In TIdServerIOHandlerSSLOpenSSL benötige ich aber .CRT, .KEY und .PEM-File. Kann man .PFX in diese umwandeln, oder sich auf anderem Wege von Let's Encrypt besorgen?

Mir ein Self-Signed-Zertifikat mittels OpenSSL zu erzeugen klappt, aber ich möchte gerne ein offizielles verwenden. (Ich + Zertifikat = Kriegsfuß)
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#2

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

  Alt 12. Jun 2019, 17:23
Bei Google suchen.pfx to .pem openssl
https://blogs.adobe.com/connectsuppo...to-pem-format/
https://www.xolphin.com/support/Cert...le_to_pem_file
https://stackoverflow.com/questions/...-using-openssl
...
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#3

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

  Alt 12. Jun 2019, 17:46
Danke.

Jetzt habe ich mit folgenden Befehlen:
Code:
C:\AppService\cert>openssl pkcs12 -in letsencrypt.pfx -out root.pem -cacerts
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

C:\AppService\cert>openssl pkcs12 -in letsencrypt.pfx -nocerts -out key.pem
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

C:\AppService\cert>openssl pkcs12 -in letsencrypt.pfx -clcerts -nokeys -out cert.pem
Enter Import Password:

C:\AppService\cert>openssl rsa -in key.pem -out server.key
Enter pass phrase for key.pem:
writing RSA key
die Dateien:
cert.pem
root.pem
key.pem
erzeugt.

Wenn ich jetzt in Delphi in den SSLOptions als CertFile die cert.pem, als Keyfile die key.pem und als RootCertFile die root.pem verwende bekomme ich folgenden Fehler:

"Exception EIdOSSLLoadingRootCertError in Modul xxxx.exe....
Stammzertifikat konnte nicht geladen werden.
error:0B084002: X509 certificat routines: X509_load_cert_crt_file:system lib."
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

  Alt 12. Jun 2019, 18:52
Hallo,
vielleicht hilft hier was

https://de.switch-case.com/54889766

Nach Stammzert suchen
Heiko
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#5

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

  Alt 12. Jun 2019, 19:10
Danke für den Link.
Leider hilft mir das nicht wirklich. So wie ich den Text verstanden habe, sollte, sofern das Rootzertifikat als File übergeben wird, dieses immer als gültig anerkannt werden. Aber scheinbar wird mein, mit obigem OpennSSL-Befehl extrahiertes, Root-Zertifikat von OpenSSL nicht anerkannt zu werden.
So jedenfalls verstehe ich das mit meinem eingeschränkten SSL-Wissen.

Mache ich da vielleicht beim Extrahieren etwas falsch? Oder kann ich ein anderes Root-Zertifikat verwenden?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

  Alt 12. Jun 2019, 19:19
Über den Web-Client (https://zerossl.com/) habe ich mir nun ein Let's Encrypt Zertifikat erstellt, und wie man im Screenshot (erster Anhang) sieht, umfasst die Zertifikatskette zwei Zertifikate, ein Intermediate Zertifikat von Let's Encrypt und ein Root-Zertifikat von DST.

Das Intermediate muss man als PEM Datei Indy bekannt machen - das Root-Zertifikat sollte der Browser bereits 'kennen' (es ist mitgeliefert, oder im Betriebssystem installiert).

Aktuelle Intermediate Certificate kann man laut Information auf https://letsencrypt.org/certificates/ downloaden. Für das zuvor bei zerossl erzeugte Zertifikat benötigt man dieses:

https://letsencrypt.org/certs/lets-e...signed.pem.txt (siehe zweites Bild im Anhang)

Dieses Intermediate Certificate ist cross-signiert von IdenTrust. Dadurch sollte es in allen gängigen Browsern akzeptiert werden ("In order to be broadly trusted right away, our intermediate is also cross-signed by another certificate authority, IdenTrust, whose root is already trusted in all major browsers.")

Damit sollte Indy funktionieren:

Delphi-Quellcode:
program IndyHttpsTest;

{$APPTYPE CONSOLE}

uses
  IdSSLOpenSSL,
  IdGlobal, IdHTTPServer,
  SysUtils, Classes, ShellAPI;

procedure Start;
var
  IOHandler: TIdServerIOHandlerSSLOpenSSL;
  Server: TIdHTTPServer;
begin
  // OpenSSL Handler erzeugen
  IOHandler := TIdServerIOHandlerSSLOpenSSL.Create;
  IOHandler.SSLOptions.CertFile := 'cert.pem'; // umbenanntes Domänen-Zertifikat von Let's Encrypt
  IOHandler.SSLOptions.KeyFile := 'key.pem'; // umbenannt, war domain-key.txt (von zerossl)
  IOHandler.SSLOptions.RootCertFile := 'cacert.pem'; // umbenannt, war lets-encrypt-x3-cross-signed.pem.txt
  IOHandler.SSLOptions.Mode := sslmServer;

  Server := TIdHTTPServer.Create;
  try
    Server.DefaultPort := 443;
    Server.IOHandler := IOHandler;
    Server.Active := True;

    // start the server
    WriteLn(Format('Server is listening on port %d', [Server.DefaultPort]));

    // launch browser
    ShellExecute(0, 'open', PChar('https://127.0.0.1'), '', '', 0);

    // terminate
    WriteLn('Hit any key to terminate.');

    ReadLn;
  finally
    Server.Active := False;
    Server.Free;
  end;
end;

begin
  try
    Start;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.
Wenn man diese Anwendung startet, sollte sich der Standardbrowser öffnen und eine Warnung anzeigen. Da mein Beispiel-Zertifikat auf die Domäne "habarisoft.com" ausgestellt wird, und nicht für "127.0.0.1".

Chrome zeigt dann eine Warnung an (siehe Anlage 3):

Zitat:
This server could not prove that it is 127.0.0.1; its security certificate is from habarisoft.com. This may be caused by a misconfiguration or an attacker intercepting your connection.
In Chrome kann man sich das Zertifikat anzeigen lassen (Klicken auf das Warndreieck links vor dem Adress-Eingabefeld). Das Zertifikat und seine certificate chain sind gültig (Anlage 4 und 5). Nach diesem Test könnte man die drei Dateien nun auf den Produktivserver hochladen und dort im Webserver installieren.
Angehängte Grafiken
Dateityp: png cert.png (6,2 KB, 32x aufgerufen)
Dateityp: png intermediate.png (5,7 KB, 24x aufgerufen)
Dateityp: png warn.png (45,9 KB, 17x aufgerufen)
Dateityp: png chrome1.png (19,9 KB, 19x aufgerufen)
Dateityp: png chrome2.png (11,9 KB, 18x aufgerufen)
Michael Justin
habarisoft.com

Geändert von mjustin (13. Jun 2019 um 06:13 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

  Alt 13. Jun 2019, 06:31
"Exception EIdOSSLLoadingRootCertError in Modul xxxx.exe....
Stammzertifikat konnte nicht geladen werden.
error:0B084002: X509 certificat routines: X509_load_cert_crt_file:system lib."
Das deutet auf eine nicht gefundene Zertifikatsdatei hin. (gefunden in https://forums.embarcadero.com/messa...=873928#873928)

Werden die Dateinamen relativ angegeben, kann es sein, dass zur Laufzeit das Arbeitsverzeichnis nicht das Verzeichnis in dem die ausführbare Datei liegt ist. Lösung: absolute Pfade verwenden und prüfen (FileExists) ob die Dateien am gesuchten Ort existieren.
Michael Justin
habarisoft.com

Geändert von mjustin (13. Jun 2019 um 06:36 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#8

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

  Alt 13. Jun 2019, 08:37
Das deutet auf eine nicht gefundene Zertifikatsdatei hin.
Danke für den Hinweis. Zwar habe ich die Existenz schon per Fileexists geprüft, aber dummerweise habe ich meinen IdHttpServer noch vor der Zuweisung connected, was natürlich dazu geführt hat, dass die per OI gesetzten Pfade noch drin standen

Was jetzt aber leider zu einem anderen Fehler führt:
"EIdOSSLLoadingCertError…..Zertifikat konnte nicht geladen werden. error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib."

Als Root-Zertifikat verwende ich das Als Zertifikat und Key-File die mittels openSSL aus dem PFX extrahierten Dateien.
Aber scheinbar scheint es noch Probleme in der certificate-chain zu geben.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL

  Alt 13. Jun 2019, 09:04
Als Zertifikat und Key-File die mittels openSSL aus dem PFX extrahierten Dateien.
Aber scheinbar scheint es noch Probleme in der certificate-chain zu geben.
Sieht das Zertifikat und seine Chain denn gut aus, wenn man es in cert.crt umbenennt und das dann öffnet?
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz