Wie teile ich die Nginx-Konfiguration auf mehrere Zeilen auf?

12

Insbesondere bei der Konfiguration von HPKP- Headern (oder anderen langen Headern im Allgemeinen) wäre es nützlich, eine Zeile in einer Nginx-Konfiguration über mehrere Zeilen aufzuteilen.

Dies ist das gewünschte Ergebnis:

pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; 
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; 
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; 
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; 
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";

Für den Browser sollte es jedoch nur eine Zeile sein:

pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";

Also habe ich einige Dinge ausprobiert, aber ich bin nicht zufrieden mit den Ergebnissen ...

Erster Versuch: Teile es einfach auf

add_header Public-Key-Pins '
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec=";
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg=";
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg=";
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo=";
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";
'

Das funktioniert, aber mit curlkann ich sehen, dass der Browser den Header mit allen Zeilenumbrüchen empfängt ...

Zweiter Versuch: Backslash

Eigentlich empfiehlt Scott Helme in dem bereits verlinkten Artikel Folgendes:

add_header Public-Key-Pins ' \
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; \
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; \
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; \
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; \
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; \
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g="; \
'

In meinem Fall wurden jedoch nur die Schrägstriche hinzugefügt und auch an den Browser zurückgegeben, sodass dies nicht funktioniert.

Wie kann ich das machen?

Bonus

Natürlich wären Kommentare für jede Zeile eine großartige Ergänzung:

pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; # current ECDSA
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; # current RSA (nginx 1.11.0)
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; # backup ECDSA 1
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; # backup ECDSA 2
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; # backup RSA 1
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g="; # backup RSA 2
Rugk
quelle
1
Könnte ein Lua oder Perl Modul verwendet werden?
Alexey Ten
Was? Wie kann ich das machen? Aber davon abgesehen möchte ich lieber eine Lösung dafür in der Nginx-Konfigurationsdatei direkt. Ich meine, es ist keine so außergewöhnliche Anforderung, mehrere Zeilen für eine Konfigurationsanweisung verwenden zu können ... zumindest ist es das, was ich denke.
Rugk
Dies könnte sich immer noch in Ihrer Konfigurationsdatei befinden. Es ist nur eine Frage, ob Ihr Nginx mit einem dieser aktivierten Module kompiliert ist.
Alexey Ten
Derzeit ist es nicht mit diesen Modulen kompiliert (es sei denn, sie sind in der von nginx kompilierten Standard-Modulgruppe enthalten), aber ich könnte sicherlich eine Version mit einem solchen Modul kompilieren ... Wenn dies zur Lösung dieses "Problems" beiträgt.
Rugk

Antworten:

8

Möglicherweise müssen Sie eine variable Verschachtelung in Betracht ziehen, die ungefähr so ​​aussieht:

set $PKP '';
set $PKP '${PKP}pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";'; # current ECDSA
set $PKP '${PKP}pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec=";'; # current RSA (nginx 1.11.0)
set $PKP '${PKP}pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg=";';  # Backup ECDSA 1
set $PKP '${PKP}pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg=";';  # Backup ECDSA 2
set $PKP '${PKP}pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo=";'; # backup RSA 1
set $PKP '${PKP}pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";';  # Backup RSA 2

add_header Public-Key-Pins $PKP;
BlackHOST
quelle
Das ist in der Tat eine gute Idee und es funktioniert. Es ist eher eine Problemumgehung, aber es ist auf jeden Fall eine Möglichkeit, dies zu tun.
Rugk
Als ich es in den Server {} steckte, bekam ich: nginx: [emerg] unexpected "s"
Atombit
0

Das ;ist das Trennzeichen

Damit Sie Dinge in mehrere Zeilen schreiben können, beenden Sie die letzte Zeile nur mit dem ;

MrE
quelle
Das habe ich versucht, First try: Just split itwenn ich es richtig verstehe. Das Problem dort war, dass der Client den Header mit allen Zeilenumbrüchen erhielt.
Rugk
dann ist deine einzige Hoffnung, alles auf eine Linie zu setzen. Lassen Sie Ihren Redakteur einwickeln, wenn Sie das stört
MrE