Directory. / documentación técnica

Certificados y mTLS

Ciclo de vida del certificado y tokens vinculados a certificado

Directory opera su propia autoridad certificadora y, sobre ella, tokens de sesión y de credencial de servicio vinculados a certificado (RFC 8705).

Emisión de certificado

POST /admin/institutions/{id}/certificates emite un certificado X.509 (RSA-2048, válido tanto para ServerAuth como ClientAuth) firmado por la CA raíz de Directory. La clave privada se devuelve una sola vez, en el cuerpo de la respuesta, y nunca se almacena — perderla significa emitir un certificado nuevo, no recuperar el anterior.

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"
}

Revocación

POST /admin/institutions/{id}/certificates/{serialNumber}/revoke cambia el estado del certificado a REVOKED. El listado público en GET /organisations/{id}/certificates refleja el estado actual de cada certificado que una institución haya recibido alguna vez — activo o revocado.

Tokens vinculados a certificado (RFC 8705)

Un token Bearer — una sesión de POST /login, o una credencial de servicio de POST .../service-credential — puede vincularse a un certificado de cliente mTLS presentado en el momento en que se emite. Una vez vinculado, toda solicitud autenticada posterior debe presentar el mismo certificado, o la solicitud se rechaza incluso con un token Bearer válido. El certificado no necesita ser emitido por ninguna CA en particular — uno autofirmado es suficiente, ya que este mecanismo vincula un token a un par de claves, no autentica mediante una cadena de confianza.

# 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 (una configuración de implementación, desactivada por defecto) hace obligatorio presentar un certificado en /login, /register y al emitir /service-credential. Un vínculo ya registrado en una sesión o credencial existente se exige independientemente de esta configuración — activarla más tarde nunca invalida a un participante que ya presentaba un certificado voluntariamente.