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

21

Könnte mir jemand den Unterschied zwischen diesen Zertifikaten auf vereinfachte Weise erklären? Ich habe einige Artikel gelesen, aber es hört sich so an, als ob sie den gleichen Job machen, nämlich viele Domänen mit einem Zertifikat zu verschlüsseln.

AFA Med
quelle
11
Zunächst einmal gibt es kein "SNI" -Zertifikat.
Michael Hampton

Antworten:

36

SAN (Subject Alternative Name) ist Teil der X509-Zertifikatspezifikation , in der das Zertifikat ein Feld mit einer Liste von alternativen Namen enthält, die auch für den Betreff gültig sind (zusätzlich zum einzelnen Common Name / CN). Diese Feld- und Platzhalternamen sind im Wesentlichen die beiden Möglichkeiten, ein Zertifikat für mehrere Namen zu verwenden.

SNI (Server Name Indication) ist eine TLS-Protokollerweiterung , die einer Art TLS-Protokoll entspricht, das dem HTTP-Host-Header entspricht. Wenn ein Client dies sendet, kann der Server das richtige Zertifikat auswählen, das dem Client präsentiert werden soll, ohne dass auf der Serverseite separate IP-Adressen verwendet werden müssen (ähnlich wie der HTTP-Host-Header häufig für einfaches HTTP verwendet wird).

Beachten Sie, dass SNI nicht im Zertifikat enthalten ist und tatsächlich das Gegenteil von dem bewirkt, was in der Frage gefordert wird. Es vereinfacht das Vorhandensein vieler Zertifikate, da für viele Dinge nicht ein einziges Zertifikat verwendet wird.

Andererseits hängt es stark von der Situation ab, welcher Weg tatsächlich vorzuziehen ist. Beispielsweise ist die Frage, nach der gefragt wird, mit ziemlicher Sicherheit nicht das, was Sie tatsächlich wollen, wenn Sie Zertifikate für verschiedene Entitäten benötigen.

Håkan Lindqvist
quelle
2
Es ist erwähnenswert, dass CN schon lange veraltet ist, wenn ein Name im CN, aber kein SAN ist (oder wenn ein Zertifikat kein SAN-Feld hat), werden viele Kunden sauer auf Sie sein.
Coderanger
1
@coderanger Wenn ein SAN-Feld vorhanden ist, wird das CN-Feld von den meisten Clients ignoriert. Wenn es kein SAN-Feld gibt, funktioniert das CN-Feld mit den meisten Clients (und wenn sie sauer auf mich werden, wird es nicht angezeigt).
Kubanczyk
1
Sie beurteilen dich schweigend.
womble
ähnelt SNI virtuellen Hosts, bei denen ein Server mit beispielsweise einer IP-Adresse mehrere in der HTTP-Konfiguration definierte Hosts enthält? (irgendeine Art von Multiplexing: Verwenden einer IP für mehrere Zertifikate anstelle jedes Zertifikats mit einer anderen IP, wobei IPv4 heutzutage eine knappe Ressource ist)?
Fernando Gabrieli
1
@FernandoGabrieli Ja, es ermöglicht die gleiche Art der namensbasierten Einrichtung auf TLS-Ebene.
Håkan Lindqvist
14

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

Wenn Sie ein Zertifikat mit SAN verwenden , können Sie mehrere HTTPS-fähige Sites unter einer IP-Adresse hosten, auch wenn der Client das SNI nicht unterstützt . In diesem Fall verfügen Sie über ein Zertifikat für alle Ihre Sites. Dieses Zertifikat muss alle Site-Namen ( ServerNames oder ServerAliases in den Apache-Koordinaten oder server_namein nginx) als SANs enthalten . Dies ist eine Teilmenge eines Legacy-Ansatzes, der die "eine HTTPS-fähige Site auf jeder separaten IP-Adresse" erweitert hat. Derzeit bleiben nur große CDNs bei SAN .

Mit SNI können Sie auch mehrere HTTPS-fähige Sites auf einer IP hosten. Sie verfügen über ein separates x509-Zertifikat für jede Site und keiner dieser Sites erwähnt andere Site-Namen in ihrer SAN- Eigenschaft, aber TLS-Clients (dh Browser und Konsolen-Clients wie wgetoder curl). muss 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 richtig erinnere. Heutzutage kann man das sehen SAN - Eigenschaft , wenn Sie den Kauf Wildcard - Zertifikat - für ein solches Zertifikat Beispiel für *.foobar.comeinen enthalten Common Name von *.foobar.comund ein SAN von foobar.com.

Drookie
quelle
1
Technisch gesehen glaube ich nicht, dass ein SSL- Client SNI unterstützen kann (meines Wissens handelt es sich um eine TLS-Erweiterung, die in SSL noch nie aufgetaucht ist).
Håkan Lindqvist
3
Sowohl SAN als auch SNI erfordern Client-Unterstützung. Da es SAN jedoch schon viel länger gibt, wird es umfassender unterstützt.
Kasperd
4

Dadurch werden zwei Teile des Zertifikatprozesses gemischt.

Ein SAN ist ein alternativer Antragstellername. Auf diese Weise können Sie ein Zertifikat für mehrere Domänen erstellen. Sie fügen einfach die anderen Domänen, für die Sie ein Zertifikat 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 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.

Christopher Perrin
quelle
0

Hier eine (möglicherweise) besser lesbare Antwort:

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

SAN ist eine Liste von "Auch bekannt als" in Zertifikaten. Auf diese Weise kann der Server ein einziges Zertifikat für viele Namen verwenden. Man kann dem gleichen Zertifikat viele Domänen und sogar eine Liste von IPs hinzufügen.

Wie Sie sehen, überschneiden sich die Dinge. Die Wahl zwischen einem oder beiden hängt davon ab, wo man die Kontrolle hat. Einige Clients erkennen Namen in SAN möglicherweise nicht und die einzige Möglichkeit, diese zu adressieren, besteht darin, ein auf SNI basierendes entsprechendes Zertifikat bereitzustellen. Es gibt Szenarien, in denen der Server eine API für ein einzelnes Zertifikat bereitstellt oder der Client keine 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.

Igor Gatis
quelle