You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
mTLS Traefik ↔ backend bloqueado pelo Serverpod (requestClientCertificate) #90
Desde a #78, o trecho Traefik → backend usa TLS 1.3 de mão única. O Traefik verifica o certificado do backend (serversTransportbackend-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