Api

Error Reference

ACME and REST API error responses from uPKI RA.

Error Reference

ACME error format (RFC 7807)

All ACME errors follow RFC 7807 Problem Details:

{
  "type": "urn:ietf:params:acme:error:<code>",
  "detail": "<human-readable message>",
  "status": <http_status_code>
}

ACME error types

TypeHTTP statusCause
malformed400Request body is malformed or missing required fields
unauthorized403JWS signature invalid or account not authorized
rateLimited429Too many requests
orderNotReady403Trying to finalize an order that is not in ready state
badCSR400CSR fields do not match the order identifiers
badNonce400Nonce not found or already used
serverInternal500Internal RA or CA error

REST API error format

Non-ACME endpoints return:

{
  "status": "error",
  "message": "<detail>"
}

Common errors and resolutions

x509: certificate signed by unknown authority (Traefik)

Traefik's LEGO client cannot validate the RA's TLS certificate.

Resolution: Inject ca.crt from the RA data volume into Traefik's trust store before startup. See Traefik Integration.

UPKI_CA_SEED is not set

The start command needs the seed for first-boot registration.

Resolution: Set UPKI_CA_SEED in your environment or Docker Compose file.

RA is not registered with CA

listen was called but no ra.crt / ra.key exist.

Resolution: Run register first, or use start for auto-bootstrap.

badNonce on every request

The client is reusing nonces.

Resolution: Fetch a fresh nonce from GET /acme/new-nonce before every signed request.

orderNotReady on finalize

The order's authorizations are not all in valid state.

Resolution: Complete and validate all challenges before calling finalize.

CSR identifiers mismatch

The identifiers in the CSR do not match the order identifiers.

Resolution: Ensure the CSR's Common Name and/or SANs match exactly the identifiers submitted in the original new-order request.

Debug logging

# Show detailed RA logs
docker logs upki-ra --follow

# Enable debug mode (bare-metal)
python ra_server.py listen --debug

The RA logs every ACME request, ZMQ call to the CA, and the CA's response.

Copyright © 2026