pfSense Setup

ACME SSL Certificate Setup

Issue a Let's Encrypt SSL certificate for the Captive Portal using ACME DNS-01 challenge via WiZone's DNS API.

Step 1 – Assign a Subdomain in WiZone Portal

  1. Go to WiZone Portal → NAS and select the target NAS.
  2. Click the Secure Captive Portal icon (globe icon).
  3. Fill in the following:
FieldExampleNotes
Captive Portal SubdomainjohndoeResults in johndoe.wizone.io
Gateway IP Address10.10.252.1IP of your WiFi interface (configured in Stage 1, Step 5.1)
  1. Click Secure Portal.

Secure Captive Portal - Setup Domain


Step 2 – Copy ACME Credentials from WiZone Portal

After clicking Secure Portal, the system displays the ACME credentials needed for pfSense configuration.

Secure Captive Portal - ACME Credentials

Copy these values — you'll need them in Step 5:

FieldNotes
UsernameACME DNS API username
PasswordACME DNS API password
SubdomainDNS challenge subdomain identifier
Base URLFixed value — see below

Base URL (ACME DNS)

https://api-acme.wizone.io
WiZone handles the DNS-01 challenge automatically via its own DNS API. No manual DNS record management required.

Step 3 – Install ACME Package on pfSense

  1. Go to System → Package Manager → Available Packages.
  2. Search for acme.
  3. Click + Install.

Install ACME Package

Wait for the installation to complete before continuing.


Step 4 – Create ACME Account Key

  1. Go to Services → Acme → Account Keys.
  2. Click + Create new account key and configure:
FieldValueNotes
Namecaptive_keyIdentifier for this account key
ACME ServerLet's Encrypt Production ACME v2Use Production for real certificates
E-Mail Address[email protected]Receives expiry notifications
  1. Click Create new account key to generate the private key.
  2. Click Register ACME account key to register with Let's Encrypt.
  3. Click Save.

ACME Account Key

A green ✓ next to the Register button confirms successful registration.

Step 5 – Create Certificate with DNS Challenge

  1. Go to Services → Acme → Certificates.
  2. Click + Add and set the general fields:
FieldValue
Namecaptive_key
Accountcaptive_key (created in Step 4)
  1. Under Domain SAN list, click + Add and configure:
FieldValueNotes
ModeEnabled
Domainnamejohndoe.wizone.ioFull Captive Portal domain
MethodDNS-acme-dns.ioACME DNS challenge
Username(from WiZone Portal)Copied in Step 2
Password(from WiZone Portal)Copied in Step 2
Subdomain(from WiZone Portal)ACME DNS identifier from Step 2 — not the same as the portal subdomain
Base URLhttps://api-acme.wizone.io

ACME DNS Configuration

  1. Click Save.

Step 6 – Issue Certificate

  1. Go to Services → Acme → Certificates.
  2. Click Issue/Renew on the captive_key certificate.
  3. Wait 1–3 minutes for issuance to complete.

ACME Issue Certificate

If issuance fails, verify:
  • Username, Password, Subdomain, and Base URL match exactly what's shown in the Portal
  • pfSense has internet access
  • The ACME account key was registered successfully (Step 4)

Step 7 – Add Certificate Action (Auto-restart on Renewal)

Go back to Services → Acme → Certificates and open captive_key for editing.

In the Actions list section, click + Add and configure:

FieldValueNotes
ModeEnabled
Command[your zone name]Enter the Captive Portal zone name you will create in Stage 3
MethodRestart Local ServiceRestarts the portal after each cert renewal

ACME Certificate Action

Click Save.

This ensures the Captive Portal service restarts automatically after each SSL renewal, preventing HTTPS errors from stale cert files.

Step 8 – Enable Auto-renewal Cron

Go to Services → Acme → Settings and enable Cron Entry.

ACME General Settings - Cron

Click Save.

Let's Encrypt certificates expire every 90 days. Cron runs a daily renewal check at 3:16 AM — no manual renewal required.