Falha do Discourse ao renovar certificado

Continuando a conversa a partir daqui:

A primeira vez que recebi um lembrete da Redsift de que meus certificados iriam expirar em uma semana. Normalmente, o Discourse renova os certificados com bastante antecedência. Desta vez não, antes de começar a reconstruir (o que supostamente resolve o problema), @Falco, há algo que você gostaria que eu verificasse e postasse aqui para ajudar a chegar à raiz do motivo pelo qual os certificados não foram renovados?

A raiz do certificado é ISRGX1 e aqui estão as informações do certificado que está expirando:

Nome Comum (CN) E6
Organização (O) Let’s Encrypt
Unidade Organizacional (OU) <Não faz parte do certificado>
Emitido em Quarta-feira, 16 de julho de 2025 às 19:36:45
Expira em Terça-feira, 14 de outubro de 2025 às 19:36:44

A compilação atual é 3.6.0.beta1-dev (7ee52c8f85)

Houve um período em que o endpoint que o Let’s Encrypt precisava foi redirecionado. Isso foi corrigido se você reconstruir.

5 curtidas

Quanto tempo depois de atualizar o certificado deve ser renovado?

Se a memória não me falha, os certificados são válidos por 3 meses, e eles agora tentarão renovar automaticamente antes disso.

1 curtida

Sim, eu sei como funciona.

Mas já se passou mais de um dia desde que atualizei o software do fórum e o certificado ainda não parece ter sido atualizado. Faltam 5 dias para expirar, então ele realmente precisa ser renovado em breve.

Estou no branch estável do Discourse, se isso fizer alguma diferença. É possível que a correção do endpoint não tenha sido retroportada?

Para mim, o certificado foi atualizado imediatamente após a reconstrução.

Você reconstruiu pela web ou pela linha de comando?

1 curtida

Sim, a explicação estava aqui:

1 curtida

Meu fórum finalmente atualizou seu certificado depois que fiz uma reconstrução na linha de comando.

3 curtidas

Tivemos a mesma experiência de SSL não renovado.

Seria ótimo se alguém pudesse verificar se o web.ssl.template está se comportando corretamente no discourse-docker, pareceu-me que a porta 80 não estava servindo nenhum URL de /.well-known/ usado pelo Let’s Encrypt, todos os URLs estavam redirecionando para SSL, incluindo arquivos de teste que coloquei manualmente em /var/www/discourse/public/.well-known/. Tive que editar /etc/nginx/conf.d/outlets/before-server/20-redirect-http-to-https.conf diretamente dentro do contêiner do aplicativo.

Talvez isso tenha começado após o commit ae4887a do discourse-docker?

1 curtida

Houve outro erro na rota mais conhecida em memória recente.

Quando foi a última vez que você fez uma reconstrução?

1 curtida

O mesmo aqui. Não recebi um aviso sobre a expiração do certificado. Entrar no servidor e iniciar uma reconstrução /var/discourse % ./launcher rebuild resolveu o problema.

2 curtidas

Em meus testes em uma instalação vanilla do nginx (1.18.0, mas acho que é o mesmo para 1.26.3), uma linha de configuração do nginx return 301 https://thehostname$request_uri; fora de um location substitui completamente qualquer bloco location anterior, em vez de ser um catch-all. Acredito que /.well-known/ simplesmente não é servido na porta 80, a menos que o redirecionamento 301 seja especificamente para outro location, como / no final do bloco server. Poderia ser o mesmo problema que este post do stackoverflow?

Fico feliz que o rebuild funcione, mas como o certificado já havia sido renovado para mim, não pude confirmar se um rebuild permitiria que os servidores de validação do Let’s Encrypt chegassem lá se um certificado tivesse expirado. Talvez um rebuild inicie a renovação do certificado antes que essa linha de template esteja em vigor ou algo semelhante, em vez de corrigir os templates, mas não consigo confirmar se é por isso que o rebuild faz a renovação funcionar.

Se você acha que isso é um Discourse, então talvez você deva responder no commit do github ou abrir um novo relatório grande.

1 curtida