Comment diviser la configuration nginx sur plusieurs lignes?

13

En particulier lors de la configuration de l'en - tête HPKP (ou d'autres en-têtes longs en général), il serait utile de diviser une ligne dans une configuration nginx sur plusieurs lignes.

Voici le résultat souhaité:

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

Cependant, pour le navigateur, il ne doit y avoir qu'une seule ligne:

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

J'ai donc essayé certaines choses, mais je ne suis pas satisfait des résultats ...

Premier essai: il suffit de le diviser

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=";
'

Cela fonctionne, mais avec curlje peux voir que les navigateurs reçoivent l'en-tête avec tous les sauts de ligne ...

Deuxième essai: barre oblique inverse

En fait, dans l'article déjà lié, Scott Helme recommande ceci:

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="; \
'

Cependant, dans mon cas, cela a simplement ajouté les barres obliques et les a également renvoyées au navigateur, donc cela ne fonctionne pas.

Alors, comment puis-je faire cela?

Prime

Bien sûr, les commentaires pour chaque ligne seraient un ajout formidable:

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
la source
1
Pourrait utiliser le module Lua ou Perl?
Alexey Ten
Quelle? Comment puis je faire ça? Mais en plus de cela, je veux plutôt une solution pour cela dans le fichier de configuration nginx directement. Je veux dire que ce n'est pas une demande si extraordinaire de pouvoir utiliser plusieurs lignes pour une directive de configuration ... c'est du moins ce que j'ai pensé.
rugk
Cela pourrait toujours être dans votre fichier de configuration. C'est juste une question si votre nginx est compilé avec l'un de ces modules activé.
Alexey Ten
Actuellement, il n'est pas compilé avec ces modules (à moins qu'ils ne soient dans l'ensemble par défaut des modules compilés par nginx), mais je pourrais certainement compiler une version avec un tel module ... Si cela aide à résoudre ce "problème".
rugk

Réponses:

8

Vous devrez peut-être envisager l'imbrication de variables qui ressemblera à ceci:

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
la source
C'est en effet une bonne idée et ça marche. C'est plus une solution de contournement, mais c'est certainement une façon de le faire.
rugk
quand je l'ai mis dans le serveur {} j'ai eu: nginx: [Emerg] "s" inattendu
Atombit
0

la ;est le séparateur

afin que vous puissiez mettre les choses sur plusieurs lignes, il suffit de terminer la dernière ligne uniquement avec le ;

MrE
la source
C'est ce que j'ai essayé First try: Just split itsi je comprends bien. Le problème était que le client recevait l'en-tête avec tous les sauts de ligne.
rugk
alors votre seul espoir est de tout mettre sur une seule ligne. laissez votre éditeur envelopper si cela vous dérange
MrE