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 → 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:
  1. Go to Integrations → Device Connectors
  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.

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. Generate an enrollment token in CertForge:
  1. Go to Integrations → Connector Agents
  2. Click + Enroll Agent and choose type Connector
  3. Give it a label (e.g. office-connector)
  4. Copy the one-time token
Run the enroll command on the connector host:
This writes three files to the --out directory: The command also prints the exact mtls_* values to add to your config file.
Create certforge-connector.yaml:
When mtls_host / mtls_cert are set, api_key is not needed and is ignored. All traffic goes to port 8443 (or 8444 for preview environments) and bypasses Cloudflare.

Option B — API key (legacy)

Use an API key if mTLS enrollment is not available in your environment.
  1. Go to Settings → API Keys
  2. Click New API Key, choose the connector scope
  3. Copy the key — shown once only
Store it in an environment variable:
Create certforge-connector.yaml:

Step 4 — Run

Test (manual):
Linux service (systemd):
Windows service (NSSM):

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 the devices: block. All other details come from CertForge automatically.
Most deployments can omit the devices: block entirely.

No device jobs

Set no_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 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, 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

ca_connector_id is required for every private_ca or private_cas entry. Every local signing request is authorized by CertForge (DTP validation, key policy) before the CA key is used — the connector will refuse to start if this field is missing.
CA key security:

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.

Supported device types

AudioCodes Mediant on firmware 7.60A or later with the ACME license option can request certificates directly from CertForge via the ACME protocol — no connector required. If your Mediant is running 7.60A+ and the ACME feature is licensed, see ACME Setup instead. The audiocodes connector driver is the right choice for devices without the ACME license, regardless of firmware version.
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-run certforge-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

Treat devices: 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, and mtls_ca paths are correct and readable by the connector process
  • Confirm mtls_host matches the hostname printed by certforge-connector enroll
  • Confirm mtls_port is 8443 (prod) or 8444 (preview/dev)
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. 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.