Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.certforge.xyz/llms.txt

Use this file to discover all available pages before exploring further.

The CertForge license is a signed JSON Web Token (JWT) stored as license.jwt. It is verified cryptographically on every startup — the signature cannot be forged or modified.

Verification

On startup, CertForge:
  1. Reads license.jwt from storage.base_path
  2. Verifies the RS256 signature using the CertForge public key embedded in the binary
  3. Reads the exp claim (expiry timestamp) from the verified payload
  4. Applies the expiry — even with no network access, the correct expiry is always enforced
This means blocking outbound traffic or deleting the call-home cache cannot extend license validity. The expiry is anchored to the signed JWT.

JWT payload claims

ClaimTypeDescription
jtistringUnique license identifier
substringLicensed email address
issstringcertforge.xyz
iatUnix timestampIssued at
expUnix timestampExpires at
org_namestringLicensed organization name
tierstringtrial | starter | pro | enterprise
cert_limitintMaximum active certificates
user_limitintMaximum user accounts
dtp_limitintMaximum Domain Trust Profiles
grace_daysintGrace period after expiry
featuresstring[]Enabled feature flags
versionstringMinimum compatible CertForge version

Feature flags

Feature flags in the features array enable capabilities beyond the base tier:
FlagDescription
haHigh-availability / multi-node deployment
siemSIEM forwarding (syslog / webhook)
acmeACME certificate issuance
oidcSSO / OIDC authentication
mtlsmTLS client certificate enforcement
apiREST API access

Inspecting a license

# Decode the payload (does not verify signature)
cat license.jwt | cut -d. -f2 | base64 -d 2>/dev/null | python3 -m json.tool
Or view current license details in the CertForge dashboard at /license.

Call-home refresh

Every 24 hours, CertForge contacts app.certforge.xyz and receives an updated license state (in case of renewal, upgrade, or limit change). The signed JWT remains the ground truth for the expiry date — call-home can extend or modify other claims by returning a new signed JWT.

Grace period behavior

StateBehavior
License valid, call-home succeedingFull functionality
License valid, call-home failingFull functionality; warning logged
License expired, call-home succeeding (renewal detected)Full functionality
License expired, call-home failing, within grace periodFull functionality; warning banner shown
License expired, call-home failing, past grace periodCertificate issuance blocked