certforge-discovery is an open-source agent that scans your infrastructure for TLS certificates and surfaces them in CertForge. It finds certificates you didn’t know you had — shadow certs from acquisitions, forgotten wildcards, certs issued by shadow IT — before they expire undetected.
GitHub: CertForge-LLC/certforge-discovery
What it scans
Installation
Download the binary for your platform from the latest release:Quick start — no account required
Run a scan locally without a CertForge account. Results print to stdout or write to a file:-dry-run with any scan to print the exact JSON payload that would be sent to CertForge — without posting anything:
Connect to CertForge
The discovery agent supports two connection methods. mTLS enrollment is recommended — it connects directly to the CertForge agent endpoint on port 8443, bypassing Cloudflare, and uses a pinned mutual-TLS certificate rather than a long-lived API key.Option A — mTLS enrollment (recommended)
Generate an enrollment token in CertForge:- Go to Integrations → Connector Agents
- Click + Enroll Agent and choose type Discovery
- Give it a label (e.g.
prod-scanner) - Copy the one-time token
~/.certforge-discovery/config.yaml automatically. The config will contain:
Option B — API key setup (legacy)
Runsetup to pick your data region and connect with an API key:
~/.certforge-discovery/config.yaml:
Discovered certificates appear in CertForge under Discovery with
source: ct_log, tls_scan, local, or k8s. They are automatically evaluated against your Domain Trust Profiles and flagged for policy mismatches.
Continuous agent mode
Run the agent continuously so CertForge always has a current picture of your cert inventory:poll_interval set in its config (default 6 hours).
Configuration
~/.certforge-discovery/config.yaml — written by enroll (mTLS) or setup (API key):
Private CA awareness
If your environment usescertforge-connector with a private_ca: configured, point known_internal_cas at the same CA cert file. Discovery will then:
- Cryptographically verify (TLS scan, local filesystem, Kubernetes) or name-match (CT log) each discovered cert against the CA
- Tag matching certs as
issuer_type: internal_cain CertForge - Show them distinctly in the Discovery view so your team can govern internal issuance separately from public CA certs
Scan flags
Running as a service
systemd:certforge-discovery enroll in a Secret:
secrets: [get, list] cluster-wide so the agent can read kubernetes.io/tls secrets across all namespaces.
What is sent to CertForge
The agent posts certificate metadata only — no private keys, no plaintext traffic, no filesystem contents beyond recognized cert formats.
For Kubernetes secrets: only the
tls.crt field is read — tls.key is never accessed or transmitted.
Corporate proxy
-target) makes direct TCP connections and is not proxied — run the agent on a host with direct access to the targets.
What happens after discovery
Discovered certs land in CertForge withgovernance_status = untracked. Your team can:
- Track — acknowledge the cert; CertForge monitors it for expiry and includes it in compliance reports
- Dismiss — mark as a known false positive; excluded from open issues
- Leave as untracked; it contributes to the Ungoverned KPI on the Dashboard