certforge-connector is an open-source agent that automates certificate renewal for network devices — SBCs, voice gateways, load balancers — that live on private management VLANs unreachable by CertForge directly.
GitHub: CertForge-LLC/certforge-connector
How it works
Prerequisites
- A CertForge account with at least one CA configured
- The device registered under Integrations → Device Connectors in CertForge
- TCP access from the connector host to the device management IP on its configured port (default 443)
Step 1 — Install the connector
Download the pre-built binary for your platform from the latest release:Step 2 — Register devices in CertForge
Before the connector can renew a device cert, the device must be registered in CertForge:- Go to Integrations → Device Connectors
- Click Register Device
- Enter the device’s name, management IP, port, device type, and credentials
- Click Save
Step 3 — Authenticate
The connector supports two authentication methods. mTLS is recommended — it connects directly to the CertForge agent endpoint, bypassing Cloudflare, and uses a pinned mutual-TLS certificate instead of a long-lived bearer token.Option A — mTLS enrollment (recommended)
Generate an enrollment token in CertForge:- Go to Integrations → Connector Agents
- Click + Enroll Agent and choose type Connector
- Give it a label (e.g.
office-connector) - Copy the one-time token
--out directory:
The command also prints the exact
mtls_* values to add to your config file.
certforge-connector.yaml:
Option B — API key (legacy)
Use an API key if mTLS enrollment is not available in your environment.- Go to Settings → API Keys
- Click New API Key, choose the connector scope
- Copy the key — shown once only
certforge-connector.yaml:
Step 4 — Run
Test (manual):Docker
--network host is required so the connector can reach devices on private management VLANs.
Azure Container Instances
To reach devices on a private Azure VNet, deploy the connector as an Azure Container Instance inside that VNet. See Connector in Azure.Optional configuration
Local credential override
If you store device credentials in a local secrets manager rather than in CertForge, supply them via thedevices: block. All other details come from CertForge automatically.
devices: block entirely.
No device jobs
Setno_device_jobs: true when this connector instance is dedicated exclusively to CA signing (no network devices to manage). Device job polling, cert reads, and version checks are skipped; CA inventory sync and approval-flow signing still work normally.
What the connector reports
Background cert discovery
On startup and every 6 hours, the connector TLS-dials each registered device and reads the leaf certificate — no device credentials needed. It reports the cert’s expiry date, Common Name, and SANs back to CertForge.On-demand cert query
From the Device Connectors page, clicking Query Cert creates apending_query job. The connector picks it up on its next poll and immediately reads and reports the current certificate.
Certificate renewal
When a cert enters its renewal window (configured in the matching Domain Trust Profile), CertForge creates a renewal job:- Connector polls
GET /api/v1/connector/jobsand receives the job with device connection details and credentials - Connector authenticates to the device and pulls the CSR
- CSR is submitted to CertForge; CertForge signs it with the configured CA
- Connector installs the signed certificate on the device
- Connector posts job completion; CertForge schedules the next renewal
On-prem CA signing (optional)
By default, CSRs are sent to CertForge for signing. If your signing CA is on-prem, you can configure the connector to sign locally while still enforcing your Domain Trust Policy through CertForge.Vault PKI (server-configured)
The simplest setup: configure the Vault address, token, mount, and role in the CertForge UI under Integrations → CA Connectors, and assign the CA connector to this connector agent. The connector receives Vault credentials with each sign request — no local YAML needed for the CA config.Vault PKI (YAML override)
Use the YAML block when you need to inject the Vault token from a local secrets manager or environment variable rather than storing it in CertForge:File-based CA (OpenSSL, Easy-RSA, cfssl)
Multiple CAs
How governed local signing works
Before signing any certificate, the connector calls CertForge to validate:- The device’s domain matches a Domain Trust Policy
- The DTP is linked to the correct on-prem CA
- Key strength and wildcard policy are satisfied
Supported device types
The Device Type dropdown in CertForge is populated automatically from the types the running connector reports — no manual entry and no CertForge update required to support a new driver.
Additional drivers can be added by implementing the
Device interface. See Adding a device type in the connector README.
Monitoring connector activity
In CertForge under Integrations → Connector Agents, each agent shows version, last seen timestamp, poll interval, number of CA connectors assigned, and number of devices connected.Security
Firewall / egress requirements
The connector requires outbound HTTPS only — no inbound ports are needed.mTLS certificate rotation
The mTLS client certificate has a fixed validity period. When it nears expiry, re-runcertforge-connector enroll with the same --label to issue a new credential set. The old certificate continues to work until the new one is deployed.
To revoke a certificate immediately: go to Integrations → Connector Agents, find the agent, and click Revoke Cert.
Local credential overrides
Treatdevices: YAML entries as an advanced, higher-risk configuration:
- Use environment variable expansion (
$SBC1_PASSWORD) — never hardcode secrets in the file. - Restrict YAML file permissions (
chmod 600 certforge-connector.yaml). - The preferred path is to store credentials in CertForge, which encrypts them at rest (AES-256-GCM) and delivers them only at job time.
TLS to devices
skip_verify: true disables TLS certificate checking for device management connections. Use only when the device uses a self-signed management certificate and you cannot install a trusted CA for it.
Troubleshooting
Connector connects but devices show no cert data- Verify TCP access from the connector host to the device management IP and port
- Check the device is set to Active on the Device Connectors page
- Run manually (
certforge-connector --config certforge-connector.yaml) to see log output
tls: internal error on cert read
The device management interface may use a self-signed certificate. Set skip_verify: true in the device registration form in CertForge for that device.
Jobs are created but never picked up
The connector polls every poll_interval (default 30s). If jobs remain pending after a few cycles, check:
- Connector is running and can reach CertForge
- Connector is connected (check Integrations → Connector Agents)
- Device is set to Active in CertForge
error: mTLS handshake failed
- Confirm
mtls_cert,mtls_key, andmtls_capaths are correct and readable by the connector process - Confirm
mtls_hostmatches the hostname printed bycertforge-connector enroll - Confirm
mtls_portis8443(prod) or8444(preview/dev)
connector.cert_signed events. If the CSR was submitted and signed but install failed, the connector log will show the device API error.
CA signing — sign request never picked up
If a CA connector is configured via the CertForge UI (not via YAML private_ca), ensure the CA connector is assigned to this connector agent in Integrations → CA Connectors → Edit. The agent only picks up sign requests for CA connectors explicitly assigned to it.