HTTPS ist ein komplexes Stück Technologie, da es von Natur aus mehrere verschiedene Anforderungen erfüllen muss.
Das Endziel von HTTPS ist es, die Kommunikation zwischen zwei Parteien zu ermöglichen, ohne dass jemand anderes sehen kann, was Sie anfordern oder empfangen. Ohne HTTPS wären Dinge wie Internetbanking unglaublich gefährlich.
Um dieses Ziel zu erreichen, gibt es zwei separate Teile.
Der erste ist die Verschlüsselung. Diese verändert die Anfragen zwischen Ihnen und der Website, sodass niemand, der sich in der Mitte der Anfrage befindet, verstehen kann, welche Daten gesendet werden. Der zweite Teil besteht darin, sicherzustellen, dass die andere Partei (in diesem Fall die Website) tatsächlich die ist, die sie vorgibt zu sein.
Das Vertrauen, dass die Website tatsächlich korrekt ist, wird durch die Verwendung von Zertifizierungsstellen hergestellt. Dies sind etablierte Organisationen, die strenge Standards einhalten müssen, um zu zeigen, dass sie vertrauenswürdig sind.
Eine Liste akzeptierter Zertifizierungsstellen wird normalerweise in Ihrem Webbrowser (Chrome usw.) und möglicherweise in Ihrem Betriebssystem als Liste von Root-Zertifikaten gespeichert.
Damit eine Website HTTPS verwenden kann, muss sie mit einer Zertifizierungsstelle verhandeln, um ein Zertifikat zu erhalten. Dabei geht es darum, der Zertifizierungsstelle zu beweisen, dass Sie derjenige sind, der Sie vorgeben zu sein.
Wenn Sie beispielsweise HTTPS auf Ihrer Website example.com verwenden möchten, würden Sie ein Zertifikat von einer Zertifizierungsstelle anfordern, die Sie möglicherweise auffordert, zu beweisen, dass Sie example.com sind, indem Sie eine Datei unter example.com/i-control-this-website.txt hosten. Der Eigentümer der Website müsste dann dieses Zertifikat auf dem Webserver installieren.
Wenn Sie dann die Website aufrufen, wird Ihnen eine Zertifikatskette bereitgestellt, die eine Liste von Zertifikaten enthält, jedes mit Informationen über das übergeordnete Zertifikat, das es ausgestellt hat. Mithilfe der Kryptographie können Sie sich eine Reihe von Eltern-/Kind-Zertifikaten ansehen und überprüfen, dass das übergeordnete Zertifikat verwendet wurde, um das Kind-Zertifikat zu erstellen.
Das Ziel davon ist es, eine Vertrauenskette zu erstellen, die es Ihnen ermöglichen sollte, zu überprüfen, dass das Root-Zertifikat für die Erstellung des Website-Zertifikats verantwortlich war.
In der einfachsten Form kann eine Kette nur aus dem Website-Zertifikat bestehen. Wenn dies auf ein Zertifikat verweist, dem Sie vertrauen (höchstwahrscheinlich ein Root-Zertifikat), kann es das Zertifikat als vertrauenswürdig erachten.
In der Praxis werden Root-Zertifikate sehr selten direkt zur Signierung von Zertifikaten verwendet. Sie werden normalerweise verwendet, um andere Zwischenzertifikate zu signieren, die entweder zur Signierung zusätzlicher Zwischenzertifikate oder des Website-Zertifikats verwendet werden können.
Dies bedeutet, dass eine Vertrauenskette aus 5 separaten Zertifikaten zwischen Ihrem Website-Zertifikat und der Root-Behörde bestehen könnte, der Ihr Computer vertraut.
Fehlende Zwischenzertifikatsketten
Eine häufige Fehlkonfiguration von Websites besteht darin, nicht alle Zwischenzertifikate bereitzustellen, die vom Webserver bereitgestellt werden, und nur das Website-Zertifikat bereitzustellen.
Dies bedeutet, dass der Browser nicht korrekt auflösen kann, ob das Zertifikat vertrauenswürdig ist oder nicht.
Dieses Problem wird oft dadurch verschleiert, dass viele moderne Browser dazu neigen, gängige Zwischenzertifikate als Teil ihrer „akzeptierten Zertifikate“ einzuschließen. Das bedeutet, dass, obwohl die bereitgestellte Zertifikatskette nicht vollständig ist, Benutzer von Chrome und Firefox keine SSL-Fehler beim Besuch der Website sehen werden (allerdings werden einige Benutzer älterer Browser dies tun).
Aus technischer Sicht besteht die Lösung für dieses Problem (je nach Zertifizierungsstelle) darin, sicherzustellen, dass Sie fullchain.pem und nicht chain.pem verwenden.