Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL (https://www.delphipraxis.net/200973-lets-encrypt-zertifikat-fuer-die-nutzung-tidserveriohandlersslopenssl.html)

Hobbycoder 12. Jun 2019 18:16

Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL
 
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ß:-D)

Delphi.Narium 12. Jun 2019 18:23

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL
 
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
...

Hobbycoder 12. Jun 2019 18:46

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL
 
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."

hoika 12. Jun 2019 19:52

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL
 
Hallo,
vielleicht hilft hier was

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

Nach Stammzert suchen

Hobbycoder 12. Jun 2019 20:10

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL
 
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?

mjustin 12. Jun 2019 20:19

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL
 
Liste der Anhänge anzeigen (Anzahl: 5)
Ü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.

mjustin 13. Jun 2019 07:31

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

Zitat von Hobbycoder (Beitrag 1434474)
"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.

Hobbycoder 13. Jun 2019 09:37

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

Zitat von mjustin (Beitrag 1434494)
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 :oops:

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
Zitat:

Zitat von mjustin (Beitrag 1434481)

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.

mjustin 13. Jun 2019 10:04

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

Zitat von Hobbycoder (Beitrag 1434517)
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?

Hobbycoder 13. Jun 2019 10:23

AW: Let's Encrypt Zertifikat für die Nutzung in TIdServerIOHandlerSSLOpenSSL
 
Meiner Meinung nach schon.
Hier mal die Dateien (leicht verändert, weil ich ja diese nicht öffentlich stellen möchte)

cert.pem:
Code:
Bag Attributes
    localKeyID: 5B C8 E4 3C 70 AD DE 94 99 45 90 94 23 51 AC 29 B5 17 5F C1 
    friendlyName: CN=personal.xyz.de
subject=/CN=personal.xyz.de
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
MIIFXDCCBESgAwIBAgISA9XuH4ogZuCWqBFOcmRuc4lKMA0GCSqGSIb3DQEBCwUE
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQOD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA2MTIxMjQ0MDFaFz0x
OTA5MTAxMjQ0MDFaMB0xGzAZBgNVBAMTEnBlcnNvbmFsLm9wY29udC5kZTCC8SIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJQ7E/fhOi0+CdD/umZQ8H2Ufn8o
CySACbWzqwNwzTy3+1TEUhJJFVic0iTnJfWQbGT0mAomvLOBL8e3b3bgY0t+cDRs
K2aBLiC0bPitFiubMtqsFaTiTJOj84nSiBSnmZ9WMRgRimRDZcJRfQySz4Os0dYM
mk/1CmxUls/+2Zsz9//GG37py832u559Zse9hhJhhFcKHgq6izauxPt99cv0my/y
GdC0SIvrpdB04bm1AN16+v8ZypkpretX8r9AOZhXE5OPhuW54fZ+yDdJ7zj+Htx+
HVOzsjJymKHH7+i5IoNWiRpbxVFS2DFAXzcvbn2QvOx5c2fqBbjDWrQ6lpkCAwEA
AaOCAmcwggJjMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBpEFBQcDAQYI
KwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUW8jmPHDtfpRFRZCUK1Gs
KbUWX8EwHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEmbwYIKwYBBQUH
AQEEYzBhMC4GCCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDrubGV0c2VuY3J5
cHQub3JnMC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQte3MubGV0c2VuY3J5
cHQub3JnLzAdBgNVHREEFjAUghJwZXJzb25hbC5vcGNvbnQu7GUwTAYDVR0gBEUw
QzAIBgZngQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgE9BQcCARYaaHR0cDov
L2Nwcy5sZXRzZW5jcnlwdC5vcmcwggEEBgorBgEEAdZ5AgrCBIH1BIHyAPAAdgBv
U3asMfAxGdiZAKRRFf93FRwR2QLBACkGjbIImjfZEwAAAatL7mALAAAEAwBHMEUC
IC4DBJhnMNynA/0IY2IWHp+Y4kn/kLIGfzn4EqzOFWKYgiEAzHHQ6U6/G5wjIX+C
dUnw+GtAgtECNohETUcSGaZVEBQAdgBj8tvN6DvMLM8jcoQnV2szpI1hd4+9daY4
scdoVEvYjQAAAWtL7mCTAAAEAwBHMEUCIF5Gz170+/ez9hd5QDy+d0P1FYJSaTTH
sZ5RRNme0EvzAiEA5SjXVAPyvdrUzA22Mf60pbTsw5+BUfSxSTnicdUIlcYwDQYJ
KoZIhvcNAQELBQADggEBAFHGLC9OCh6X1SwDifva7TL5kUxnEfU/pqIi7r7COBi8
YE8eaHYUD4pISy2+4yFaUv1rtVWlX1zgjcajs7m11dsnG7v8VJ+qbyquMhxoP0lT
bNc9YsUCvKiMBlRnIlQAGfMWi+gtwFPA7Jvg2ktz21abV0F0s2nozetlgKCbzkhT
z2aL7FGXwEqf/GE3cKR7WgkpGJzI+AXvHyS5Lp+Oer6ZXk5f3UBOdDVjYvQ2yR53
FkhH9UcgkWvKMMhuHlu1gpo50SNsWfR2kic4dxlbWO7WClzIbUIjtmV3LopfOGtp
MaleMu8HRb4KVRsARGl/WvfozWtvaBr16x/q8a5pHQc=
-----END CERTIFICATE-----
key.pem
Code:
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAlDsT9+E6LT4J0P+6ZlDwfYV+fygLJIAJtbOrA3DNrLf7VMRS
EkkVWJzSJOcl9ZBsZPSYCia8s4Evx7dvduBjSH5wNGwrZoEuILRs+K0dK5sy2qwV
pOJMk6PzidKIFKeZn1YxGBGKZENlwlF9DJLP06zR1gyaT/UKbFSWz/hZmzP3/8Yb
funLzfa7nn1mx72GEmGEVwoeCrqLNq7E+31Zy/SbL/IZ0LRIi+ul0aThubUA3Xr6
/xnKmSmt61fyv0A5mFcTk4+G5bnh9n7IN1bvOP4e3H4dU7OyMnKYkcfv6Lkig1aJ
GlvFUVLYMUBfNy9ufZC87HlzZ+oFuMNas7qWmQIDAQABAoIBAAGoZYt+S2vEAxhs
R7oP8xeNu+oRhd8zHdbIuNoT83GD5cCl/Ihv/kLSfH6RsYOv5ec93LUzXuE8cf3h
342UrDgpyBvFukSKyUsiMiX7sLjS2MpuQ1n42S0rJssbeFtFvewrmt6aNS/TA3UN
QhEu2O9G1FdngXaekiWbkog3ircrJQLmG7T+apzpkzotlsPuhSXvL4Cazcg1wvXC
rdZdSE/irXkP2J44WZLm2IsirP/xflnu6hKqHkGCq0p5kDq4I85xJ+9YPAC7VG/V
89tN5TYHmA9yXsx9+8uAycMCvrAahZJCiLUjZuP0IMlXK6d5FUCeECUK/gDL0psO
j1elonECgYEA0c624zceo0UsaDRzh0juxanmNu+BDEbnwbRkwnANxyguwwDFtk/A
2t17lOC7MJx0vf0hc0Y4DjHhYsse2P9c0EEvGRbNcY+k7xDPCDEoIjq++TzgmvKG
8y6RCM0ri9J/l/rE/e7bE/uZMY9mKBO/c+1oqQI/Hkvf+u+StTk9IRECgYEAtN2+
QHFcDvc3pXdSe0DPMNsST69+DX7T+4gk9Axl/nM6oKcER1zJVMA6YmMnn4swT9Zc
zt/AWqaSjGVNsJAXuekAMWhnaw6iz6TrbOQFRsPua6pC1ePbbc+BreWSbcwDNfwi
ZvnKENghr3Qt6WO8dvMyDfiEEu1qZn2Wpy59nQkC3YEApQ5A5wPoAH5c7yXEdXu1
DKAa0sEc/vGRRxc5RZYt4K4GC7dB06luiUCRBpCx8wJC/Wx0smFdnB01uSke/Yv4
EoYVbWF5AowFA1gf58v0TOl2cFGqSXvfGtVZmFrAlyFk68WG0Fbm1xOqc0jjD0hp
5+Ov4LY5vbX9aG6tNhDvvGECgYBXjlkBfV8hZtAqq/7j59XlQsg0hzIwektIovmw
oyfk7AdfqvSOT16vhnc9Fd8inxD+NTmsdCj84VMMYCYh6T9zIlaTlIUsEGPEvYOy
rRfY0BTlH4gHX0zkdeXDNzWRrYeIZMyKqTWdvdpgw49OQpgDxWtf1ASr3P77KqT5
vcnVcQKBgEGVTvwahmpOD5jvEOkySbbuC73Gyje17BMB9KQPUA86/j7ZKVamH7w/
CN717xzJ1WY1i3xMKr4M5mCj5yUVBBNeSdbvGUjh7UHw6/y/48oUFmnieylpCCe1
fPMmJti4GLsStqXt6CjNBRCJ+XoA0FP6gjG7Uf8sYHchxWRPYVSy
-----END RSA PRIVATE KEY-----
root.pem (unverändert, da öffentlich herunterladbar von hier: https://letsencrypt.org/certs/lets-e...signed.pem.txt)
Code:
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----


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