Forum: PC-Programmierung Verständnisproblem beim HTTPS Verbindungsaufbau


von Fabian (Gast)


Lesenswert?

Hallo die Herren,

ich beschäftige mich zurzeit mit dem https Handshake zwischen Client und 
Server. Dazu habe ich mir folgenden Link angeschaut.

https://www.elektronik-kompendium.de/sites/net/1811281.htm

Soweit sogut.

Habe ein Demo Board von TI und kann mich mit dem Beispielprojekt "https 
Request" erfolgreich mit einem Webserver verbinden. Dafür benötige ich 
ein Root Zertifikat/Wurzelzertifikat. In meinem Beispiel ist es das 
"DigiCertGlobalRootCA.crt" Zertifikat für die Webseite 
https://www.example.org

Wenn ich mir den HTTPS Verbindungsaufbau bei elektronik-kompendium 
anschaue sehe ich kein Root-Zertifikat.

Welche Aufgabe hat das Root-Zertifikat?

Ist es eine implementierung für die validierung des Server Zertifikats 
im Punkt 3 (Zertifikat prüfen) ?

von Stefan F. (Gast)


Lesenswert?

Der HTTPS Server muss dem Client nachweisen, wer er ist. Dazu sendet er 
sein Zertifikat an den Client.

Ein Zertifikat ist ein elektronisches Dokument mit der Domain des 
Besitzers, sowie weiteren optionalen Informationen (Inhaber, Anschrift, 
etc). Im Prinzip wie ein Personalausweis oder eine Geburtsurkunde.

Der Browser würde einem einfaches Zertifikat jedoch nicht vertrauen. 
Schließlich könnte sich jeder Hinz und Kunz einfach eins selbst 
erstellen. Urkunden kann man sich ja auch selbst schreiben.

Vertrauenswürdig werden solche Dokumente erst, wenn eine 
vertrauenswürdige Person dieses Unterschreibt. Bei Zertifikaten ist 
diese Unterschrift natürlich elektronisch und einigermaßen 
fälschungssicher.

Die Frage ist: Wer ist vertrauenswürdig? Du jedenfalls nicht.

Der Browser und/oder das Betriebssystem enthält einen Satz sogenannter 
Root Zertifikate. Die gehören den Personen/Firmen, die sich selbst 
auserkoren haben, Zertifikate (Dokumente) zu beglaubigen. Die kungeln 
alle in einem Club zusammen und folgen ihren eigenen Regeln, welche 
festlegen, wer eigentlich vertrauenswürdig ist.

Wer die Clubregeln bricht, fliegt raus. In der Praxis läuft das dann so, 
dass diese Zertifikate beim nächsten Betriebssystem- oder 
Browser-Upgrade entsprechend gekennnzeichnet werden.

Wer zum Club gehört, kann die Zertifikarte seiner 
Freunde/Geschäftspartner unterschreiben, so dass diese automatisch 
ebenfalls als Vertrauenswürdig gelten. Und die können das auch tun, usw.

Angenommen du bist gerade auf der Seite mikrocontroller.net, dann zeigt 
dein Browser an, dass mikrocontroller.net vertrauenswürdig ist, weil der 
Server ein Zertifikat mit passender Domain vorgelegt hat und dieses von 
jemandem (Let's Encrypt) als vertrauenswürdig unterschrieben wurde.

Und wer hat Let's Encrypt überhaupt erlaubt, solche Unterschriften zu 
erteilen? Das war die Firma ISRG. Kennst du die? Bist du ganz sicher, 
dass ISRG nicht irgendwelchen Deppen die Erlaubnis erteilt, Zertifikate 
zu erstellen? Fragen über die man mal nachdenken sollte.

Um auf deine Frage zurück zu kommen: ISRG ist in diesem Fall die Root 
Zertifizierungsstelle. Wenn dein Betriebssystem/Browser deren Zertifikat 
vorliegen hat, vertraut es allen Kunden von ISRG autmatisch ebenfalls - 
in diesem Fall Let's Encrypt. Und er vertraut auch allen Kunden von 
Let's Encrypt - in diesem Fall mikrocontroller.net.

Damit dein Browser HTTPS spricht, muss der Server ein Zertifikat 
vorlegen. Es muss nicht unterschrieben sein. Solche Zertifikate kann man 
sich mit einem openssl Kommando ganz einfach selbst erstellen.

Allerdings warnt der Browser vor solchen unsignierten Zertifikaten. Er 
würde auch warnen, wenn du das Zertifikat einfach selbst unterschreibst, 
mit einem selbst gebasteltem Root Zertifikat.

Damit ein grünes Schloss erscheint, muss das Zertifikat von einer 
offiziellen Root CA unterzeichnet werden oder von einem direkten oder 
indirekten Geschäftspartner einer Root CA.

Alternative: Einfach eine Phantasie Root CA erstellen, das Server 
Zertifikat damit signieren und das Root CA Zertifikat zentral 
installieren.

Das hat z.B. die Firma Sennheiser gemacht, und dann auch noch den 
privaten Schlüssel mit einem Treiber verteilt, so dass jeder Hacker 
jetzt böse Webseiten erstellen konnte, die "angeblich" von Sennheiser 
als Vertrauenswürdig unterschrieben wurden. Toll, was?

Am Ende vertrauen die Geschäftsleute jedem, der genug zahlt. Das ist 
meine Meinung dazu. Dazu kommen Deppen wie Sennheiser, die das ganze 
System unabsichtlich untergraben, aber natürlich auch Leute, die das 
absichtlich machen. Wer kontrolliert schon, ob der neue Video Downloader 
neue Zertifikate mit installiert?

Wusstest du, dass die NSA Mitglied im Club ist? Da könnte man noch sagen 
"Die Amerikaner sind aber die guten". Und was ist mit einem arabischen 
Geheimdienst? Den gibt's nämlich auch im Club.

von Fabian (Gast)


Lesenswert?

Hallo Stefanus,

danke für die vielen Informationen.
Ich versuche mal mit deinen Infos , mir eine Antwort zu geben.

Also nachdem der Server sein Server Zertifikat an den Client sendet 
prüft der CLient mit Hilfe des Root Zertifikat die Echtheit des Server 
Zertifikats.

Ist das so korrekt?

Denn ich habe auch gelesen, das nachdem der Client das Server Zertifikat 
erhalten hat, der Client den Server der CA kontaktiert und somit das 
zuvor übertragene Server Zertifikat validiert.

von Stefan F. (Gast)


Lesenswert?

Fabian schrieb:
> Ist das so korrekt?

So ist es.

> Denn ich habe auch gelesen, das nachdem der Client das Server
> Zertifikat erhalten hat, der Client den Server der CA kontaktiert
> und somit das zuvor übertragene Server Zertifikat validiert.

Das ist ein optionales Feature. Ich weiß nicht, welche Clients davon 
Gebrauch machen.

Ein weiteres optionales Feature ist die Abfrage einer öffentlichen 
Sperr-Liste.

In Kombination mit Apps gibt es dann noch das "Certificate Pinning". 
Dabei vertraut die App nur ganz bestimmten Zertifikaten, die in der App 
selbst hinterlegt sind (nicht allen, die auf eine Root CA führen).

von (prx) A. K. (prx)


Lesenswert?

Fabian schrieb:
> Ist das so korrekt?

Ja. Damit werden erstellte Zertifikate verifiziert. Aber zurückgezogene 
Zertifikate lassen sich so nicht feststellen...

> Denn ich habe auch gelesen, das nachdem der Client das Server Zertifikat
> erhalten hat, der Client den Server der CA kontaktiert und somit das
> zuvor übertragene Server Zertifikat validiert.

...und das geschieht hier.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.