Cipher String Syntax in Nginx

8

In einer Nginx-Konfigurationsdatei können Sie eine Liste solcher SSL-Chiffren konfigurieren

ssl_ciphers                HIGH:!aNULL:!eNULL:!LOW:!ADH:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;

Wie lautet die Syntax dieser Chiffrierzeichenfolge? Das heißt, ich weiß (oder denke, ich weiß, korrigiere mich, wenn ich falsch liege), dass diese Zeichenfolge eine Liste möglicher SSL-Chiffren sowie eine Priorität für sie bereitstellen soll. In der Dokumentation wird das Format dieser Zeichenfolge weniger gut erklärt.

Spezifische Fragen

  • Ist das !eine Negation? Bedeutet das, !DSSdass DSS nicht verwendet wird? Oder ist !DSSdas gleiche von einer Chiffre?

  • Sind die :Zeichen Trennzeichen? Das heißt, über einer Liste von Chiffren "HIGH ,! ANULL ,! ENULL, etc ..." oder bedeutet das :etwas anderes

  • Sind HIGHund LOWdas gleiche von Chiffren, oder sind sie spezielle Meta-Direktiven irgendeiner Art

  • Oben nicht abgebildet, aber ich habe solche Saiten gesehenAES256-GCM-SHA384:ECDHE-RSA-RC4-SHA: . Sind die -Zeichen Teil des Chiffriernamens oder haben sie eine besondere Bedeutung?

Gibt es eine Ressource, die erklärt, wie diese Zeichenfolge funktioniert, oder ist dies ein Fall, in dem von den Personen, von denen erwartet wird, dass sie mit der Zeichenfolge arbeiten, auch erwartet wird, dass sie die Nginx-Quelle lesen, um herauszufinden, wie sie funktioniert?

Alan Storm
quelle

Antworten:

5

Diese Syntax stammt von OpenSSL. Siehe CIPHER LIST FORMAT .

Weiter unten werden verschiedene Chiffren aufgelistet und diese Meta-Chiffren mögen HIGH

Auszug:

Die Verschlüsselungsliste besteht aus einer oder mehreren durch Doppelpunkte getrennten Verschlüsselungszeichenfolgen. Kommas oder Leerzeichen sind ebenfalls akzeptable Trennzeichen, aber normalerweise werden Doppelpunkte verwendet.

Die eigentliche Verschlüsselungszeichenfolge kann verschiedene Formen annehmen.

Es kann aus einer einzelnen Verschlüsselungssuite wie RC4-SHA bestehen.

Es kann eine Liste von Chiffresuiten darstellen, die einen bestimmten Algorithmus enthalten, oder Chiffresuiten eines bestimmten Typs. Zum Beispiel repräsentiert SHA1 alle Chiffrensuiten unter Verwendung des Digest-Algorithmus SHA1 und SSLv3 repräsentiert alle SSL v3-Algorithmen.

Listen von Chiffresuiten können mit dem Zeichen + in einer einzigen Chiffrierzeichenfolge kombiniert werden. Dies wird als logische und Operation verwendet. Zum Beispiel repräsentiert SHA1 + DES alle Cipher Suites, die den SHA1- und den DES-Algorithmus enthalten.

Vor jeder Chiffrierzeichenfolge können optional die Zeichen !, - oder + stehen.

Wenn ! Wird verwendet, werden die Chiffren dauerhaft aus der Liste gelöscht. Die gelöschten Chiffren können niemals wieder in der Liste erscheinen, selbst wenn sie ausdrücklich angegeben sind.

Wenn - verwendet wird, werden die Chiffren aus der Liste gelöscht, aber einige oder alle Chiffren können durch spätere Optionen wieder hinzugefügt werden.

Wenn + verwendet wird, werden die Chiffren an das Ende der Liste verschoben. Diese Option fügt keine neuen Chiffren hinzu, sondern verschiebt nur die vorhandenen.

...

Christopher Perrin
quelle
4

Die Nginx- ssl_ciphersDirektive verwendet das OpenSSL-Verschlüsselungslistenformat .

Diese Verschlüsselungsliste wird als eine oder mehrere Verschlüsselungszeichenfolgen beschrieben, die normalerweise durch Doppelpunkte oder Kommas getrennt sind (Leerzeichen werden auch von OpenSSL unterstützt, Sie müssen die Liste jedoch in Anführungszeichen mit nginx setzen).

Eine Verschlüsselungszeichenfolge ist eine bestimmte Verschlüsselungssuite oder Verschlüsselungssuite, die unter einem Schlüsselwort zusammengefasst sind .

Standardmäßig wird OpenSSL mit einer Standardverschlüsselungsliste geliefert, die zum Zeitpunkt der Bibliothekskompilierung festgelegt wurde und aus offensichtlichen Sicherheitsgründen Verschlüsselungssuiten ohne Verschlüsselung oder Authentifizierung ausschließt. Es sollte ALL:!aNULL:!eNULLwie bei OpenSSL 1.0 sein.

Beispiel: Verschlüsselungszeichenfolge HIGHbedeutet, dass alle Verschlüsselungssuiten eine Verschlüsselung mit Schlüsseln mit mehr als 128 Bit bereitstellen, während die Verschlüsselungszeichenfolge mit Verschlüsselungssuiten mit 56- LOWoder 64-Bit-Schlüsseln übereinstimmt. Auch AES256-GCM-SHA384und ECDHE-RSA-RC4-SHAsind besondere Chiffresuiten.

Symbol !bedeutet, dass die Gruppe der Cipher Suites oder die bestimmte Cipher Suite entfernt wird, wenn der Server während der Handshake-Phase unterstützte Cipher Suites mit dem Client austauscht. Zum Beispiel !eNULLund !aNULLMittel Chiffre entfernen Suiten bietet keine Verschlüsselung und Authentifizierung.

Xavier Lucas
quelle