Forma soportada de añadir "IncludeSubdomain" a las cabeceras STS

Hola a todos,

para nuestras instancias de Discourse autoalojadas actuales, necesitamos agregar “IncludeSubDomains” a nuestros encabezados STS debido a que es una expectativa de nuestros escáneres internos.

Anteriormente, logré esto usando algunos comandos sed en app.yml en comandos personalizados después de la compilación para actualizar /etc/nginx/conf.d/discourse.conf para incluir 'add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;'

así como:

 - replace:
      filename: "/etc/nginx/conf.d/outlets/discourse/20-https.conf"
      from: /add_header Strict-Transport-Security.+/
      to: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
      global: true

  - replace:
      filename: "/etc/nginx/conf.d/outlets/server/20-https.conf"
      from: /add_header Strict-Transport-Security.+/
      to: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
      global: true

Esto funcionó anteriormente. Sin embargo, ha dejado de funcionar. Leí que crear un nuevo archivo de salida debería permitirme agregar esto usando:

hooks:
  after_code:
    - file:
        path: /etc/nginx/conf.d/outlets/server/90-hsts.conf
        chmod: 444
        contents: |
          add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Sin embargo, esto resulta en que haya dos encabezados STS presentes (uno de la plantilla SSL y uno de mi nueva plantilla). ¿Hay una forma mejor de hacer esto para no terminar con dos encabezados STS? Pensaría que nginx respetaría el último encabezado agregado e ignoraría el encabezado de la plantilla SSL que solo contiene max-age=31536000; , ¿así que esto es un defecto? Gracias por cualquier orientación que puedan brindarme.

¿Usar set_header en lugar de add_header soluciona el problema?

1 me gusta

Voy a intentarlo e informaré de los resultados :slight_smile:

Si uso set_header obtengo un error SSL en la reconstrucción, con el certificado no siendo reconocido y un mensaje de “conexión rechazada” al intentar cargar la página del foro.

Alguna información adicional, usamos nuestro propio certificado SSL.

Estos dos errores son mutuamente excluyentes…

Lo siento, nginx no tiene set_header - lo recordaba mal y es de otra herramienta.

La opción más fácil es probablemente editar templates/web.ssl.template.yml con los nuevos valores que deseas.