Directory. / documentação técnica

Certificados e mTLS

Ciclo de vida do certificado e tokens vinculados a certificado

O Directory opera a própria autoridade certificadora e, em cima dela, tokens de sessão e de credencial de serviço vinculados a certificado (RFC 8705).

Emissão de certificado

POST /admin/institutions/{id}/certificates emite um certificado X.509 (RSA-2048, válido tanto pra ServerAuth quanto ClientAuth) assinado pela CA raiz do Directory. A chave privada é devolvida uma única vez, no corpo da resposta, e nunca é armazenada — perdê-la significa emitir um certificado novo, não recuperar o antigo.

curl -X POST https://directory.open.dev.br/admin/institutions/{institutionId}/certificates \
  -H "Authorization: Bearer {sessionToken}"

{
  "certPem": "-----BEGIN CERTIFICATE-----...",
  "keyPem":  "-----BEGIN RSA PRIVATE KEY-----...",
  "serialNumber": "4F3A9C...",
  "subjectDn": "CN=Example Bank,O=Example Bank"
}

Revogação

POST /admin/institutions/{id}/certificates/{serialNumber}/revoke vira o status do certificado pra REVOKED. A listagem pública em GET /organisations/{id}/certificates reflete o status atual de todo certificado que uma instituição já recebeu — ativo ou revogado.

Tokens vinculados a certificado (RFC 8705)

Um token Bearer — uma sessão de POST /login, ou uma credencial de serviço de POST .../service-credential — pode ser vinculado a um certificado de cliente mTLS apresentado no momento em que é emitido. Uma vez vinculado, toda requisição autenticada seguinte precisa apresentar o mesmo certificado, ou a requisição é recusada mesmo com um token Bearer válido. O certificado não precisa ser emitido por nenhuma CA em particular — autoassinado é suficiente, já que este mecanismo vincula um token a um par de chaves, não autentica via cadeia de confiança.

# Generate a certificate — any CA, including none, works
openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout client.key -out client.crt -days 3650 \
  -subj "/CN=example-bank"

# Presenting it at login binds the session it returns
curl --cert client.crt --key client.key \
  -X POST https://directory.open.dev.br/login \
  -d '{ "email": "admin@example.com", "password": "..." }'

# Every later call with that session must present the same certificate
curl --cert client.crt --key client.key \
  https://directory.open.dev.br/admin/institutions/{institutionId} \
  -H "Authorization: Bearer {sessionToken}"

DIRECTORY_REQUIRE_MTLS_BINDING (uma configuração de implantação, desligada por padrão) torna a apresentação de certificado obrigatória em /login, /register e na emissão de /service-credential. Um vínculo já gravado numa sessão ou credencial existente é imposto independente desta configuração — ligá-la depois nunca invalida um participante que já vinha apresentando um certificado por conta própria.