Sign inSign up

toresoft/sign-verify

By toresoft

โ€ขUpdated 13 days ago

REST API service for verifying electronic signatures using the EU DSS library.

Image
Security
1

6.0K

toresoft/sign-verify repository overview

โ sign-verify

REST service for eIDAS electronic-signature verification (PAdES, CAdES, XAdES, JAdES, ASiC) built on Spring Boot 3.5 and the EU DSS 6.4 library, with EU Trusted List (LOTL/TSL) management.

This page is a quick reference for running the published image. The complete, diagram-rich usage guide lives in the source repositoryโ .


โ What it does

  • Signature verification, synchronous and asynchronous (job + HMAC-signed HTTP callback).
  • Verification profiles (BASIC / STANDARD / STRICT) with per-request policy overrides.
  • Extraction of the original document from a signed container.
  • TSL management: download and mirror of the EU List of Trusted Lists (LOTL), scheduled refresh, inspection of trusted certificates.
  • Authentication via API key (X-API-Key) and/or OAuth2 JWT; roles STANDARD and PRIVILEGED.
  • Audit log, observability (health/readiness, Prometheus metrics, JSON logs), automatic job retention and cleanup.

Supported formats: PAdES (PDF), CAdES (CMS), XAdES (XML), JAdES (JSON), ASiC-S/ASiC-E.

โ Image

  • Registry: toresoft/sign-verify
  • Base: alpine:3.21 with a minimal custom jlink runtime (Java 21), runs as non-root (uid:gid 10001)
  • Exposed port: 8080
  • Writable data path: /var/lib/sign-verify (mount a volume here)
โ Tags
TagMeaning
latestLatest build from the default branch
<version>Released version (Git tag, e.g. 0.9.21)
<short-sha>Exact commit build

โ Quick start

A valid APP_SECRET_MASTER_KEY (base64 of 32 bytes) is required; generate one with openssl rand -base64 32. By default OAuth is enabled, so either provide APP_SECURITY_OAUTH_ISSUER_URI or disable it with APP_SECURITY_OAUTH_ENABLED=false.

docker run -d --name sign-verify -p 8080:8080 \
  -e SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/signverify \
  -e SPRING_DATASOURCE_USERNAME=signverify \
  -e SPRING_DATASOURCE_PASSWORD=secret \
  -e APP_SECRET_MASTER_KEY="$(openssl rand -base64 32)" \
  -e APP_SECURITY_OAUTH_ENABLED=false \
  -v svdata:/var/lib/sign-verify \
  toresoft/sign-verify:latest

On first start, if no PRIVILEGED API key exists, a bootstrap key is generated and written to /var/lib/sign-verify/bootstrap-api-key.txt (mode 0600) โ€” read it, create your own keys, then remove it:

docker exec sign-verify cat /var/lib/sign-verify/bootstrap-api-key.txt

A hardened, production-oriented docker-compose.prod.yml (read-only root FS, dropped capabilities, resource limits) is provided in the repositoryโ .

โ Main environment variables

VariableDescriptionDefault
SPRING_DATASOURCE_URLJDBC database URLin-memory H2
SPRING_DATASOURCE_USERNAME / _PASSWORDDB credentialssa / (empty)
APP_SECRET_MASTER_KEYSecret-encryption key, base64 of 32 bytes(required)
APP_SECURITY_OAUTH_ENABLEDEnable the OAuth2 JWT resource servertrue
APP_SECURITY_OAUTH_ISSUER_URIOIDC issuer (required when OAuth enabled)(empty)
APP_OJ_KEYSTORE_PASSWORDEU Official Journal keystore password (LOTL)(empty)
SERVER_PORTHTTP port8080

See the full list and details in the configuration guideโ .

โ Health

  • Liveness: GET /actuator/health/liveness
  • Readiness: GET /actuator/health/readiness (UP only once the Trusted Lists are loaded)
  • Metrics: GET /actuator/prometheus

โ API

OpenAPI contract is served at /v3/api-docs, Swagger UI at /swagger-ui/index.html. Endpoint reference: signature verificationโ  ยท authenticationโ  ยท trusted certificatesโ .

โ License

LGPL-3.0. See NOTICEโ  for third-party attributions.

Tag summary

Content type

Image

Digest

sha256:b2055f528โ€ฆ

Size

154.7 MB

Last updated

13 days ago

docker pull toresoft/sign-verify