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


Kann mir jemand den Unterschied zwischen diesen Zertifikaten erklären? Ich lese einige Artikel, aber es klingt, als würden sie die gleiche Aufgabe erfüllen, nämlich viele Domains mit einem Zertifikat zu verschlüsseln.


20
2017-10-09 09:46


Ursprung


Zunächst einmal gibt es kein "SNI" SSL-Zertifikat. - Michael Hampton♦


Antworten:


SAN (Alternativer Antragstellername) ist Teil des X509-Zertifikat spec, wobei das Zertifikat ein Feld mit einer Liste alternativer Namen enthält, die auch für den Betreff gültig sind (zusätzlich zu dem einzelnen allgemeinen Namen / 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 ein TLS-Protokollerweiterung Das ist eine Art des TLS-Protokolls, das dem HTTP-Host-Header entspricht. 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, wonach die Frage fragt; Es vereinfacht das Vorhandensein vieler Zertifikate und verwendet kein Zertifikat für viele Dinge.

Auf der anderen Seite 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.


32
2017-10-09 11:53



Es ist erwähnenswert, dass CN für eine lange Zeit veraltet ist, wenn ein Name im CN aber nicht SAN ist (oder wenn ein Cert kein SAN-Feld hat), werden viele Clients wütend auf Sie. - coderanger
@coderanger Wenn ein SAN-Feld vorhanden ist, wird das CN-Feld von den meisten Clients ignoriert. Wenn es kein SAN-Feld gibt, arbeitet das CN-Feld mit den meisten Clients (und wenn sie bei mir wütend werden, wird es nicht angezeigt). - kubanczyk
Sie beurteilen dich lautlos. - womble♦
Ist SNI etwas ähnlich wie virtuelle Hosts, wo ein Server mit einer IP-Adresse mehrere Hosts in der HTTP-Konfiguration definiert hat? (Eine Art von Multiplexing: Verwenden einer IP für mehrere Zertifikate anstelle von jedem Zertifikat mit einer anderen IP, wobei IPv4 heutzutage eine knappe Ressource ist)? - Fernando Gabrieli
@FernandoGabrieli Ja, es ermöglicht die gleiche Art der namenbasierten Einrichtung auf TLS-Ebene. - Håkan Lindqvist


SAN steht für Alternativer Name des Antragstellers, und es ist eine X509-Zertifikat-Eigenschaft, und SNI ist eine Funktion, die der SSL / TLS-Client unterstützen kann, also eine völlig andere Entität.

Verwenden eines Zertifikats mit SAN Sie können mehrere HTTPS-fähige Sites auf einer IP-Adresse hosten, auch wenn der Client das nicht unterstützt SNI. In diesem Fall verfügen Sie über ein Zertifikat für alle Ihre Websites. Dieses Zertifikat muss alle Site-Namen enthalten (ServerNames oder ServerAliases in den Apache-Koordinaten, oder server_name in nginx) wie es ist SANs. 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.

Verwenden SNI Sie können auch mehrere HTTPS-fähige Sites in einer IP-Adresse hosten. Sie verfügen über ein separates x509-Zertifikat für jede Site und keiner von diesen erwähnt andere Site-Namen in deren SAN Eigenschaft, aber TLS-Clients (d. h. Browser und Konsolen-Clients wie z wget oder curl) muss unterstützen SNI. Dies ist ein moderner Ansatz, da das letzte OS nicht unterstützt SNI Out-of-the-Box war Windows XP mit IE 6.x, wenn ich mich richtig erinnere. Heutzutage kann man das sehen SAN Eigentum, wenn Sie das kaufen Platzhalter Zertifikat - zum Beispiel ein solches Zertifikat für *.foobar.com enthält a Gemeinsamen Namen von *.foobar.com und ein SAN von foobar.com.


13
2017-10-09 10:55



Technisch glaube ich das nicht SSL Der Client kann SNI unterstützen (meines Wissens ist es eine TLS-Erweiterung, die in SSL nie erschienen ist). - Håkan Lindqvist
Sowohl SAN als auch SNI erfordern Client-Unterstützung. Da SAN jedoch schon viel länger verfügbar ist, wird es breiter unterstützt. - kasperd


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.


4
2017-10-09 10:15





Hier eine (möglicherweise) menschlichere Antwort:

SNI wird auf der Client-Seite ausgeführt und teilt dem TLS-Stack "Ich möchte mit einem Server mit dem Namen [Server X] sprechen" mit. Der Server sieht diese Zeichenfolge [Server X] 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 (um DNS-Lookup-Verzögerungen zu vermeiden), aber das Zertifikat CN die IP nicht erwähnt.

SAN ist eine Liste von "auch bekannt als" in Zertifikaten. Auf diese Weise kann der Server ein einzelnes Zertifikat für viele Namen verwenden. Man kann viele Domains zum selben Zertifikat hinzufügen und sogar eine Liste von IPs.

Wie Sie sehen können, überschneiden sich die Dinge. Die Wahl zwischen einem oder beiden hängt davon ab, wo man die Kontrolle hat. Einige Clients erkennen Namen möglicherweise nicht im SAN, und die einzige Möglichkeit, dies zu beheben, besteht darin, ein entsprechendes Zertifikat basierend auf SNI bereitzustellen. Es gibt Szenarien, in 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.

Meine Firma nutzt beides. Sie bieten Flexibilität und vereinfachen die Rückwärts- und Vorwärtskompatibilität.


0
2017-08-01 15:21