Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy 10 HTTPClient mit SSL, Verständnisfrage zu den Zertifikaten (https://www.delphipraxis.net/182727-indy-10-httpclient-mit-ssl-verstaendnisfrage-zu-den-zertifikaten.html)

Codehunter 13. Nov 2014 11:27

Indy 10 HTTPClient mit SSL, Verständnisfrage zu den Zertifikaten
 
Hallo!

Ich gebe zu mir ist für die Frage irgendwie kein gescheiter Titel eingefallen. Mir geht es um folgendes:

Ich habe auf meinem Apache Webserver ein selbst erstelltes Zertifikat installiert und mit einem VHost verbunden. Funktioniert prima.

Nun will ich mit Indy auf den VHost zugreifen. HTTPClient und SSLIOHandler konfiguriert. Läuft auch. Im OnVerifyPeer muss ich zwar den X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT Fehler abfangen, aber sonst kein Problem.

Was ich an den Zertifikat nicht verstehe: Auf dem Server habe ich mit "openssl" drei Dateien erzeugt: eine .csr, eine .key und eine .crt. Im Apache VHost abe ich die die .key und die .crt angegeben. Die .crt scheint er bei einem GET-Request an den Client auszuliefern. Der Client scheint dann Infos aus der .crt an den Server zurück zu senden und die Verbindung damit zu verschlüsseln.

Was ich nicht verstehe: Wenn der Server das Client-Zertifikat selbst ausliefert, ist das dann nicht eine dicke Sicherheitslücke? Müsste man das nicht vielmehr mit seinem Setup mitliefern? Ich gaub, ich steh da auf dem Schlauch ;)

Grüße
Cody

CCRDude 13. Nov 2014 11:53

AW: Indy 10 HTTPClient mit SSL, Verständnisfrage zu den Zertifikaten
 
Erstmal hast Du damit nur eine verschlüsselte Verbindung.

Mit wem die besteht, musst Du anders klären. Du kannst zum Beispiel den CommonName oder andere Details prüfen. Bringt natürlich bei selbstsignierten nichts, weil die sich jeder erstellen kann. Oder Du prüfst die Seriennummer des Zertifikates, oder einen Hash dessen. Mit der Stolperfalle, dass Du nach Ablauf (falls es zeitlich beschränkt ist) natürlich ein anderes wirst auf dem Server installieren müssen, und der Client dann eine andere Seriennummer sieht.

mjustin 13. Nov 2014 11:56

AW: Indy 10 HTTPClient mit SSL, Verständnisfrage zu den Zertifikaten
 
Zitat:

Zitat von Codehunter (Beitrag 1279624)
Was ich nicht verstehe: Wenn der Server das Client-Zertifikat selbst ausliefert, ist das dann nicht eine dicke Sicherheitslücke? Müsste man das nicht vielmehr mit seinem Setup mitliefern?

Es handelt sich nicht um ein Client-Zertifikat, es ist ja global für den Server hinterlegt.

Alle Serverzertifikate (signiert oder nicht) werden vom Webserver automatisch an den HTTP(S) Client ausgeliefert. Sie müssen ja vom Client stets kontrolliert werden, da sie AFAIK auch zurückgezogen werden können.

Codehunter 13. Nov 2014 13:02

AW: Indy 10 HTTPClient mit SSL, Verständnisfrage zu den Zertifikaten
 
Zitat:

Zitat von CCRDude (Beitrag 1279631)
Erstmal hast Du damit nur eine verschlüsselte Verbindung.

Mit wem die besteht, musst Du anders klären. Du kannst zum Beispiel den CommonName oder andere Details prüfen. Bringt natürlich bei selbstsignierten nichts, weil die sich jeder erstellen kann. Oder Du prüfst die Seriennummer des Zertifikates, oder einen Hash dessen. Mit der Stolperfalle, dass Du nach Ablauf (falls es zeitlich beschränkt ist) natürlich ein anderes wirst auf dem Server installieren müssen, und der Client dann eine andere Seriennummer sieht.

Ok, das kann ich nachvollziehen. Da ich ja beide Seiten "in der Hand" habe könnte ich bestimmte Zertifikatsmerkmale in meinem Programm hinterlegen und gegenchecken.

Um ehrlich zu sein sehe ich in dem Szenario irgendwie keinen Sinn darin, "offizielle", also von einem Trustcenter signierte Zertifikate zu verwenden. Ich brauche nach meinem Verständnis keine externe Instanz die meinem Programm versichert, dass meine Zertifikate auch wirklich von mir sind. Anders siehts ja aus wenn eine Seite der verschlüsselten Verbindung eben nicht weiß, ob das gelieferte Zertifikat authentisch ist.

Trotzdem bleibe ich dabei dass es in diesem Szenario doch sicherer wäre, der Server würde das Zertifikat nicht in die Welt hinaus "brüllen". Andererseits war ja SSL/TLS nie dazu gedacht, als Zugangsschutz zu funktionieren sondern als Absicherung des Transportweges.

CCRDude 14. Nov 2014 10:05

AW: Indy 10 HTTPClient mit SSL, Verständnisfrage zu den Zertifikaten
 
Wenn Du extern signierte Zertifikate nimmst, musst Du nicht die Seriennummer prüfen (die sich ja auch ändern kann, wenn Du nach Ablauf neue ausstellst) - Du prüfst einfach, ob die Zertifikate auf "Codehunter AG" ausgestellt sind. Da die Trustcenter sowas "sicher" prüfen, d.h. Deinen Perso, Deinen Führerschein, die letzte Stromrechnung Deines Büros und nen Handelsregisterauszug fordern (als Beispiel).

Wenn Du also ein gültig geprüftes Zertifikat hast, bist Du sehr sicher, dass der Eigentümer ("Codehunter AG") stimmt.

In Deinem Fall übernimmt es also lediglich die nervige fehleranfällige Geschichte, den Clients neue Serverzertifikate beibringen zu müssen.

In Sachen Zugangsschutz hat mjustin übrigens das Stichworte genannt: Client-Zertifikate. Kennt man am ehesten von SSH - Anmeldung per Zertifikat statt Passwort. Macht StartSSL auch für ihr Benutzerkontrolzentrum (https). IRC-Nutzer können das bei euirc auch...


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