Forma suportada de adicionar "IncludeSubdomain" aos cabeçalhos STS

Olá a todos,

para as nossas instâncias auto-hospedadas atuais do Discourse, precisamos adicionar “IncludeSubDomains” aos nossos cabeçalhos STS devido a ser uma expectativa dos nossos scanners internos.

Anteriormente, eu conseguia isso usando alguns comandos sed no app.yml em comandos personalizados após a compilação para atualizar /etc/nginx/conf.d/discourse.conf para incluir 'add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;'

assim 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

Isso funcionava anteriormente. No entanto, parou de funcionar. Li que criar um novo arquivo de outlet deve me permitir adicionar isso 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;

No entanto, isso resulta em dois cabeçalhos STS presentes (um do template SSL e um do meu novo template). Existe uma maneira melhor de fazer isso para que eu não termine com dois cabeçalhos STS? Eu pensaria que o nginx respeitaria o último cabeçalho adicionado e ignoraria o cabeçalho do template SSL, que contém apenas max-age=31536000; , então isso é um defeito? Agradeço qualquer orientação que possam fornecer.

Usar set_header em vez de add_header resolve o problema?

1 curtida

Vou tentar e depois volto para relatar :slight_smile:

Se eu usar set_header, recebo um erro SSL na reconstrução, com o certificado não sendo reconhecido e a mensagem “conexão recusada” ao tentar carregar a página do fórum.

Algumas informações adicionais, nós usamos nosso próprio certificado SSL.

Esses dois erros são mutuamente exclusivos…

Desculpe, o nginx não tem set_header - eu me lembrei mal e é de outra ferramenta.

A opção mais fácil é provavelmente editar templates/web.ssl.template.yml com os novos valores que você deseja.