Skip to content

mTLS Traefik ↔ backend bloqueado pelo Serverpod (requestClientCertificate) #90

Open

Description

@hbgit

Acompanhamento da #78 (PR #89).

Contexto

Desde a #78, o trecho Traefik → backend usa TLS 1.3 de mão única. O Traefik verifica o certificado do backend (serversTransport backend-tls, com serverName e rootCAs). O backend, porém, não verifica quem se conecta a ele. Qualquer processo na rede do Compose que alcance sinalacs-serverpod:8080 consegue falar com o RPC sem apresentar certificado.

Bloqueio

O Serverpod 3.4.13 sobe o apiServer pelo relic_io, que chama HttpServer.bindSecure sem requestClientCertificate. Por isso o SecurityContextConfig(apiServer:) não tem como exigir um certificado de cliente. SecurityContext.setClientAuthorities sozinho não basta, porque o servidor nunca pede o certificado.

Caminhos possíveis

  • Uma versão do Serverpod ou do relic que exponha requestClientCertificate. Acompanhar o upstream ou abrir uma issue lá.
  • Um sidecar de terminação mTLS na frente da 8080 (stunnel, por exemplo). Ele sai do spec/stack.md e exige decisão de arquitetura.
  • Isolar a rede: o backend fica numa rede Docker interna onde só o Traefik entra. É mitigação, não autenticação.

Critério de aceite

  • O Traefik apresenta um certificado de cliente assinado pela CA de dev do RPC (serversTransport.certificates).
  • Sem esse certificado, uma conexão à 8080 interna é recusada no handshake.
  • O Grupo E de scripts/qa/tls_invariants.sh ganha o caso negativo (sem certificado de cliente → recusa) e o positivo.

Requisito: RNF04 (segue parcial também pelo Postgres, pelo Gorush, pelas portas 8082/8083 e pelo painel 8081, fora do escopo desta issue).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    securityCibersegurança e conformidade

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions