fragen stichworte

Was ist der Unterschied zwischen SAN- und SNI-SSL-Zertifikaten?

Könnte mir jemand den Unterschied zwischen diesen Zertifikaten vereinfacht erklären? Ich lese einige Artikel, aber es klingt so, als würden sie dieselbe Aufgabe erfüllen, nämlich das Verschlüsseln vieler Domänen mit einem Zertifikat.

antworten

SAN (Alternativer Antragstellername) ist Teil der X509-Zertifikat -Spezifikation, wobei das Zertifikat ein Feld mit einer Liste alternativer Namen enthält, die auch für das Thema gelten ( zusätzlich zu dem einzelnen Common Name/CN). Diese Feld- und Platzhalternamen sind im Wesentlichen die zwei Möglichkeiten, ein Zertifikat für mehrere Namen zu verwenden.

SNI (Server Name Indication) ist eine TLS-Protokollerweiterung, die eine Art des TLS-Protokolläquivalents des HTTP-Host-Headers ist. Wenn ein Client dies sendet, kann der Server das richtige Zertifikat auswählen, das dem Client präsentiert wird, ohne die Einschränkung der Verwendung separater IP-Adressen auf der Serverseite zu haben (ähnlich wie der HTTP-Host-Header für einfaches HTTP verwendet wird).

Beachten Sie, dass SNI nicht etwas ist, was sich im Zertifikat widerspiegelt, und es tatsächlich tatsächlich das Gegenteil dessen erreicht, was die Frage verlangt; Es vereinfacht das Vorhandensein vieler Zertifikate und verwendet kein Zertifikat für viele Dinge.

Andererseits hängt es stark von der Situation ab, welcher Weg eigentlich vorzuziehen ist. Was die Frage zum Beispiel verlangt, ist fast sicher nicht das, was Sie wirklich wollen, wenn Sie Zertifikate für verschiedene Entitäten benötigen.

SAN steht für Subject Alternative Name und ist eine x509-Zertifikateigenschaft. SNI ist eine Funktion, die der SSL/TLS-Client unterstützen kann Unterstützung, also eine völlig andere Einheit.

Bei Verwendung eines Zertifikats mit SAN können Sie mehrere HTTPS-fähige Sites auf einer IP-Adresse hosten, auch wenn der Client die SNI nicht unterstützt. In diesem Fall besitzen Sie ein Zertifikat für alle Ihre Sites, und dieses Zertifikat muss alle Site-Namen enthalten (ServerName s oder ServerAlias es in den Apache-Koordinaten oder server_name in nginx), da es ist SANs. Dies ist eine Teilmenge eines älteren Ansatzes, der den "HTTPS-fähigen Standort auf jeder separaten IP-Adresse" erweitert hat. Derzeit bleiben nur große CDNs mit SAN erhalten.

Mit SNI können Sie auch mehrere HTTPS-fähige Sites auf einer IP-Adresse hosten, Sie besitzen ein separates x509-Zertifikat für jeden Standort und keiner dieser Standorte erwähnt andere Standortnamen in seinem SAN -Eigenschaft, aber TLS-Clients (z. B. Browser und Konsolenclients wie wget oder curl) müssen SNI unterstützen. Dies ist ein moderner Ansatz, da das letzte Betriebssystem, das SNI nicht standardmäßig unterstützt, Windows XP mit IE 6.x war, wenn ich mich recht erinnere. Heutzutage können Sie die SAN -Eigenschaft sehen, wenn Sie das Wildcard-Zertifikat erwerben. Beispielsweise enthält ein solches Zertifikat für *.foobar.com einen Common Name von *.foobar.com und ein SAN von foobar.com.

Dies mischt zwei Teile des Zertifikatsprozesses.

Ein SAN ist ein alternativer Antragstellername. Es ist eine Möglichkeit, ein Zertifikat für mehrere Domänen zu erstellen. Sie fügen einfach die anderen Domänen, für die Sie ein Zertifikat erhalten möchten, dem SAN-Feld im Zertifikat hinzu. Der Browser akzeptiert dann auch die Gültigkeit dieser Domains.

SNI ist Server Name Indication und ist Teil von SSL. Sie können mehrere SSL-Sites auf einer einzigen IP-Adresse hosten, da der gewünschte Servername mit dem SSL-Handshake gesendet wird und der Server das richtige Zertifikat für die Antwort auswählen kann.

Hier eine (möglicherweise) besser lesbare Antwort:

SNI wird auf der Clientseite ausgeführt und teilt dem TLS-Stack mit: "Ich möchte mit einem Server sprechen, dessen Name [Server X] ist". Der Server sieht diese Zeichenfolge [Server X] und antwortet mit einem entsprechenden Zertifikat. Ein praktisches Beispiel ist, wenn ein einzelner Server den Datenverkehr für mehrere Domänen bereitstellen muss. Dies ist auch nützlich, wenn der Client eine IP-Adresse verwendet hat (um Verzögerungen bei der DNS-Suche zu vermeiden), das Zertifikat CN jedoch die IP-Adresse nicht erwähnt.

SAN ist eine Liste von "auch als bekannt" in Zertifikaten. Auf diese Weise kann der Server ein einzelnes Zertifikat für viele Namen verwenden. Man kann viele Domänen zu demselben Zertifikat und sogar zu einer Liste von IPs hinzufügen.

Wie Sie sehen, überlappen sich die Dinge. Die Wahl zwischen einem oder beiden hängt davon ab, wo man die Kontrolle hat. Einige Clients erkennen möglicherweise keine Namen im SAN und die einzige Möglichkeit zur Adressierung ist das Bereitstellen eines entsprechenden Zertifikats, das auf SNI basiert. Es gibt Szenarien, bei denen der Server eine API für ein einzelnes Zertifikat bereitstellt oder der Client kein SNI sendet. In diesen Fällen ist SAN der einzige Ausweg.

Mein Unternehmen nutzt beides. Sie bieten Flexibilität und erleichtern die Rückwärts- und Vorwärtskompatibilität.