Skip to content

Certificado HTTPS

Enquanto não houver um certificado pendurado numa das suas portas, o streamer serve HTTP simples. Esta página percorre todo o caminho de uma máquina crua até um https:// funcionando — e passa pelas razões de a emissão não começar.

Os certificados moram nos streamers, e cada um emite o seu: o central não guarda chaves privadas alheias. O que se configura aqui é o documento de configurações do streamer, então ele sobrevive a uma reinstalação da máquina.

O que é preciso antes de começar

O Let's Encrypt não emite nada enquanto as três condições não valerem:

  • Um nome de domínio. O ACME não emite para um IP pelado — https://45.41.213.34 não se obtém de nenhuma CA pública. É preciso um nome que você controle.
  • DNS já apontando para este streamer. A autoridade certificadora resolve o nome e conecta a quem responder. Aponte o registro A/AAAA para a máquina antes de pedir o certificado, não depois.
  • A porta 443 acessível pela internet. É aqui que mais se erra, então vale ser exato sobre como a validação funciona.

O Catena valida com TLS-ALPN-01: a prova é servida dentro do handshake TLS, na mesma porta que carrega o tráfego. Daí duas consequências:

  • A porta 80 não é necessária de forma alguma. Não há rota HTTP de desafio, nada a abrir, nada a redirecionar. Se a intuição diz «o Let's Encrypt precisa da porta 80» — esse é outro tipo de desafio, e não é o usado aqui.
  • A porta tem de ser a 443. A CA de produção só executa TLS-ALPN-01 contra a porta 443. Um certificado configurado em 8443 nunca será emitido: fica em «emitindo» sem erro, porque a CA jamais chega até ele. O formulário avisa disso, mas é a forma mais comum de travar.

O TLS-ALPN-01 também não sobrevive a um proxy que termine TLS na frente do streamer: o handshake precisa chegar ao próprio streamer.

Ativar a emissão automática aceita em seu nome o acordo de assinante do Let's Encrypt; o streamer registra uma conta ACME na primeira vez que pede.

Emitir um certificado Let's Encrypt

Abra o streamer a partir do registro e desça até a seção Certificados no pé do cartão.

A seção de certificados antes da primeira entrada

Clique em Ativar HTTPS. Uma única ação percorre toda a cadeia de pré-requisitos: adiciona um listener na porta 443 e pendura nele uma entrada Let's Encrypt. O certificado sempre mora numa porta — por isso o listener vem primeiro, e por isso o botão o cria por você.

Agora preencha a entrada:

Uma entrada Let's Encrypt com seus domínios e o e-mail ACME

  • Domínios — separados por vírgula. São os nomes que o certificado vai cobrir, e por eles os clientes o escolhem via SNI. Sob o campo o formulário sugere o hostname dos endereços do próprio streamer; é uma sugestão e se aplica só ao clicar, então um campo vazio significa honestamente que o nome ainda não foi definido.
  • E-mail de contato ACME — obrigatório. Sem ele nada é emitido, e o botão Salvar alterações continua inativo. A CA também envia para lá os avisos de expiração.

Deixe Avançado em paz: uma URL do diretório ACME vazia significa o Let's Encrypt de produção.

A fila de portas acima mostra o resultado — um chip marcado tls é uma porta que carrega certificado:

A fila de listeners com a porta TLS

Clique em Salvar alterações. As configurações viajam até a máquina; a trilha de aplicação mostra até onde chegaram.

Conferir o resultado

O estado da emissão aparece ao lado da própria entrada e se repete no cartão de certificados no topo. Três estados, e eles não se sobrepõem:

  • emitindo — o pedido está em curso. Normal nos primeiros segundos após salvar.
  • emitido — com o prazo restante; duas semanas antes de expirar a linha fica amarela. A renovação é automática e troca o certificado sem re-vincular a porta, então nada cai.
  • falhou — com o motivo, literal da CA.

Uma emissão que falhou, com o motivo

Uma entrada cujo certificado ainda não foi emitido não serve nada: o handshake para seus domínios é recusado em vez de responder com um certificado errado.

Mandar os espectadores por https

O certificado na porta não muda sozinho os endereços entregues aos players. Se a URL pública de payload em Conexão e entrega ainda for http://, os espectadores continuam sendo mandados em texto claro e o certificado fica sem uso — o formulário diz isso abertamente. Troque essa base para https:// com o nome que o certificado cobre.

O mesmo vale para a URL da API do streamer: depois do primeiro certificado convém passar também as chamadas do próprio central para https://.

O seu próprio certificado

Escolha PEM estático como fonte da entrada quando o certificado vier de outro lugar — a sua CA corporativa, uma paga, ou um wildcard que você mesmo obteve.

Ambos os campos aceitam ou o texto PEM inteiro, ou um caminho para um arquivo no streamer:

  • Cole o PEM e o central o distribui às máquinas. É assim que um único certificado wildcard se espalha por muitos streamers, e é a única maneira de usar um wildcard aqui: o ACME só os emite por DNS-01, e o Catena não faz isso.
  • Informe caminhos e o streamer lê os arquivos do disco. Rotacione-os com Ansible ou com o que for; o streamer os relê sem reiniciar e sem derrubar conexões.

Repare no que colar o PEM implica: a chave privada passa a morar no documento de configurações do streamer e a API a devolve inteira na leitura. Acesso de leitura a esse documento equivale a acesso de escrita à configuração — trate-o de acordo.

Um certificado autoassinado para bancada

Autoassinado faz o streamer gerar o certificado sozinho. Não precisa de DNS, nem de porta acessível, nem de CA, então é o jeito de experimentar TLS numa rede interna onde o ACME é indisponível por princípio. Os clientes vão mostrar um aviso de confiança — isso é esperado, e é por isso que não é opção de produção.

Um certificado autoassinado nunca substitui uma emissão do Let's Encrypt que falhou. A falha continua sendo uma falha visível, em vez de degradar em silêncio para um aviso a cada espectador.

Limites que vale conhecer

O Let's Encrypt permite 50 certificados por registered domain a cada 7 dias, e o limite é contado globalmente entre todas as contas. Cada streamer emitir o seu não escapa disso: cem streamers sob um mesmo example.com batem no teto já na primeira implantação, e ele se repõe a cerca de sete por dia. As renovações em regime estável — uma dúzia por semana para um cluster desses — ficam bem abaixo.

Se a primeira implantação for maior que o limite:

  • obtenha você mesmo um certificado wildcard e distribua-o como PEM estático;
  • ou aponte o campo URL do diretório ACME para outra CA — é um caminho suportado, não uma gambiarra;
  • ou peça ao Let's Encrypt um aumento de limite, semanas antes da implantação.

Para bancadas use a chave CA de teste (staging) em Avançado: emite um certificado não confiável, mas não gasta o limite de produção. Trocar de CA reinicia a emissão do zero — a conta e o material são guardados por URL de diretório, então uma conta de staging nunca chega à CA de produção.

Uma consequência de escolher o certificado por SNI: não há certificado padrão. Uma requisição à porta TLS por endereço IP, ou com um nome desconhecido, tem o handshake recusado. Verificações de saúde que sondam a porta por IP param de funcionar — aponte-as para um nome que o certificado cubra.

Quando a emissão não começa

Preso em «emitindo» para sempre. Por ordem de probabilidade: a entrada não está na porta 443; o DNS do domínio não resolve para este streamer; a porta 443 está fechada por fora; algo termina TLS na frente do streamer.

O salvamento é recusado. Uma entrada letsencrypt sem e-mail de contato é recusada inteira — o streamer responde que o listener «has a letsencrypt tls entry but no acme section is configured». Preencha o e-mail. Duas entradas numa mesma porta reivindicando o mesmo domínio também são recusadas, assim como uma entrada estática com certificado mas sem chave privada.

A própria porta é recusada. O erro aparece ao lado da porta que o causou. A causa habitual é uma porta já ocupada por outro processo na máquina.

O console parou de abrir depois de ativar HTTPS. O documento de configurações é dono da lista de portas por inteiro: assim que ele contém um listener, a porta inicial da máquina deixa de valer. Se todas as portas HTTP da lista carregam TLS, o HTTP simples para de responder — e na máquina que roda o central o console é servido justamente dessas portas. O formulário avisa quando não sobra nenhuma porta simples na lista; mantenha a porta HTTP simples ao lado da 443, a menos que você queira deliberadamente só HTTPS.

O certificado está emitido mas os espectadores continuam indo por http. Os endereços de entrega são independentes do certificado — veja Mandar os espectadores por https.