Skip to main content
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

The connector is stateless and requires no inbound firewall rules. It polls CertForge for pending renewal jobs, pulls a CSR from the device, has it signed (by CertForge or by your on-prem CA), and installs the certificate back on the device. Device credentials are not stored on the connector host. Username and password are entered in CertForge under Network Devices, stored AES-256-GCM encrypted, and delivered to the connector at job execution time — in memory, never written to disk.

Prerequisites

  • A CertForge account with at least one CA configured
  • The device registered under Integrations → Network Devices in CertForge
  • A connector API key (see below)
  • TCP access from the connector host to the device management IP on its configured port (default 443)

Step 1 — Create a connector API key

The connector authenticates to CertForge with a scoped API key. These keys can only reach the /api/v1/connector/ endpoints.
  1. Go to Settings → API Keys
  2. Click New API Key
  3. Give it a descriptive name (e.g. office-connector)
  4. Check the connector scope
  5. Click Create
  6. Copy the key — it is shown once only
Store it in an environment variable, not in the YAML config file:

Step 2 — Register devices in CertForge

Before the connector can renew a device cert, the device must be registered in CertForge:
  1. Go to Integrations → Network Devices
  2. Click Register Device
  3. Enter the device’s name, management IP, port, device type, and credentials
  4. Click Save
The device UUID displayed on this page is what the connector uses to match renewal jobs. Once the connector is running, the Device Type dropdown is populated automatically from the types the connector reports — no manual entry required.

Step 3 — Install the connector

Download the pre-built binary for your platform from the latest release:

Windows

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 (F5 BIG-IP, Ribbon SBC, etc.), deploy the connector as an Azure Container Instance inside that VNet. No inbound ports are required. See Connector in Azure for the full step-by-step guide.

Step 4 — Configure

Create certforge-connector.yaml (start from certforge-connector.yaml.example in the release):
That’s the entire required config. Device topology — host, port, type, and credentials — is stored in CertForge and delivered with each renewal job automatically.

Local credential override (optional)

If you store device credentials in a local secrets manager rather than in CertForge, you can supply them via the devices: block. List one entry per device with the CertForge device UUID, username, and password. All other details come from CertForge automatically.
Most deployments can omit the devices: block entirely.

Step 5 — Run

Test (manual):
Linux service (systemd):
Put the API key in /etc/certforge-connector/env:
Windows service (NSSM): Download NSSM and from an elevated command prompt:

What the connector reports

Once running, the connector performs the following automatically:

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. CertForge uses this to populate the Expires, DTP, and Renewal in columns on the Network Devices page before any renewal job has run.

On-demand cert query

From the Network Devices page, clicking Query Cert creates a pending_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:
  1. Connector polls GET /api/v1/connector/jobs and receives the job with device connection details and credentials
  2. Connector authenticates to the device and pulls the CSR
  3. CSR is submitted to CertForge; CertForge signs it with the configured CA
  4. Connector installs the signed certificate on the device
  5. Connector posts job completion; CertForge schedules the next renewal
All steps appear in the CertForge audit log.

On-prem CA signing (optional)

By default, CSRs are sent to CertForge for signing. If your signing CA is on-prem and you do not want CSRs leaving the network, you can configure the connector to sign locally while still enforcing your Domain Trust Policy through CertForge.

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
CertForge records the authorization server-side. If CertForge is unreachable, the connector will not sign — it is fail-closed. The signed certificate is reported back to CertForge for audit and inventory.

Setup

  1. Go to Settings → CA Connectors and add a Private / Internal CA (On-Prem Agent) connector. This automatically creates a CA record in CertForge that can be referenced in Issuance Profiles and Domain Trust Policies.
  2. Create an Issuance Profile pointing to this CA, then assign it in a Domain Trust Policy covering your device domains.
  3. Add the CA key and certificate to certforge-connector.yaml. Use the ca_connector_id from the CA connector record in CertForge:
ca_connector_id is required. The connector will refuse to start if a private_ca or private_cas entry is present without a ca_connector_id. Every local signing request must be authorized by CertForge (DTP validation, key policy) before the CA key is used — no exceptions.
CA key security: the CA private key is loaded from disk on the connector host. Restrict file permissions to the connector process user:
For higher-assurance environments, consider a passphrase-protected key or loading it from a local secrets manager (HashiCorp Vault, AWS Secrets Manager, etc.). If you manage multiple on-prem CAs, use private_cas: to list them:

CA inventory sync

When ca_connector_id is set, the connector can also push the CA’s issued certificate inventory into CertForge Discovery. Add an inventory source to the private_ca block: File-based CAs (OpenSSL, Easy-RSA, cfssl):
HashiCorp Vault PKI:
Inventory syncs on startup and every 6 hours. Pushed certs appear in Discovery with governance_status=tracked.

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, each device shows: Inactive devices are excluded from connector job lists — the connector will not attempt renewal or query jobs for them.

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 Network Devices 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 app.certgov.app
  • API key has the connector scope
  • Device is set to Active in CertForge
Renewal completed but cert wasn’t installed Check the audit log in CertForge for connector.cert_signed events. If the CSR was submitted and signed but install failed, the connector log will show the device API error. Local signing denied by CertForge If you see local signing denied in the connector log, check:
  • The device domain matches a Domain Trust Policy
  • The DTP is linked to the on-prem CA connector record
  • The ca_connector_id in certforge-connector.yaml matches the record in CertForge
private CA has no ca_connector_id at startup The connector refuses to start if a private_ca or private_cas entry lacks ca_connector_id. Add the connector record in CertForge (Settings → CA Connectors), copy its ID, and add ca_connector_id: <id> to the YAML entry. See On-prem CA signing above.

Security

Firewall / egress requirements

The connector requires outbound HTTPS (port 443) only — no inbound ports are needed.

Local credential overrides

If you supply device credentials via the devices: block in YAML (rather than storing them in CertForge), treat this 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) so only the connector process can read it.
  • The preferred path is to store credentials in CertForge, which encrypts them at rest (AES-256-GCM) and delivers them only at job time. YAML overrides are intended for environments where credentials must come from a local secrets manager.

TLS to devices

skip_verify: true disables TLS certificate checking for device management connections. It should only be used when the device uses a self-signed management certificate and you cannot install a trusted CA for it. Surface this prominently in device inventories and plan to replace self-signed management certs where possible.