Skip to main content
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:
Verify the download:
Or build from source (requires Go 1.22+):

Quick start — no account required

Run a scan locally without a CertForge account. Results print to stdout or write to a file:
Use -dry-run with any scan to print the exact JSON payload that would be sent to CertForge — without posting anything:

Connect to CertForge

Run setup to pick your data region and connect the agent to your CertForge account:
This writes a config file to ~/.certforge-discovery/config.yaml. Then run a scan:
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:
The agent re-scans on the poll_interval set in its config (default 6 hours).

Configuration

Setup writes ~/.certforge-discovery/config.yaml:
EU West (GDPR):

Private CA awareness

If your environment uses certforge-connector with a private_ca: configured, point known_internal_cas at the same CA cert file. Discovery will then:
  1. Cryptographically verify (TLS scan, local filesystem, Kubernetes) or name-match (CT log) each discovered cert against the CA
  2. Tag matching certs as issuer_type: internal_ca in CertForge
  3. Show them distinctly in the Discovery view so your team can govern internal issuance separately from public CA certs
This is a read-only classification — discovery never contacts the CA or generates certificates.

Scan flags

Running as a service

systemd:
Kubernetes:
Grant the service account 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

Live TLS scanning (-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 with governance_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
See Certificate Discovery for the full governance workflow.