How to create, import, renew, and use certificates and keys on Korthveil, for the web console, VPNs, RADIUS and NAC, and services. Everything is under System › Certificates. Certificates are stored in Korthveil's own database. Which service uses which certificate is configuration, which you save and commit like any other change.

1. What you can do

You want Use Where the private key comes from
A certificate browsers trust for the web console, from a public CA Let's Encrypt (ACME) Made on the firewall, renewed automatically
A certificate from your registrar or a commercial CA Signing request (CSR), then Import from your registrar or CA Made on the firewall; never leaves it
To install a certificate you already have (zip, tar.gz, pfx, pem) Import from your registrar or CA In the bundle
Your own private PKI for internal services, Wi-Fi (NAC), VPN users Create a local CA, then Issue from a local CA Made on the firewall
A quick test certificate Self-signed Made on the firewall

Keys are generated on the firewall: ECDSA P-256 by default, or P-384, RSA 2048, or RSA 3072, all FIPS-approved. A key is never shown or exported. The one exception is a device certificate (use: Client), which can be downloaded once as a password-protected .p12 to install on a laptop or phone (§5).

2. Using a certificate (deployment)

Choosing the web console's certificate
Choosing the web console's certificate

Choosing a certificate is a setting:

Renewals deploy themselves:

The Used by column shows where each certificate is in use. A certificate that is in use cannot be deleted.

Let's Encrypt (ACME) needs no purchase. It proves the domain through Cloudflare DNS (DNS-01) or HTTP, and renews by itself:

Let's Encrypt (ACME)
Let's Encrypt (ACME)

3. Buying a certificate: CSR, then the registrar's bundle

  1. Add a certificate › Signing request (CSR): enter a name (e.g. www.example.com), the common name, and DNS names, then click Create. The firewall makes the private key and the request.
A certificate signing request
A certificate signing request
  1. Click CSR in the Store row to download www.example.com.csr, and paste or upload it at your registrar or CA.
  2. When they send the certificate, usually a .zip, use Import from your registrar or CA, choose the file, and click Import. Korthveil recognises it as the answer to your request (by its key) and completes it. The key never left the firewall, so the bundle has no key, and that is expected.
  3. Choose it for the web console, or wherever it is needed, and commit.

4. Importing a bundle as it came

Import from your registrar or CA
Import from your registrar or CA

Import from your registrar or CA takes the download exactly as it came:

5. A private CA for your devices (NAC, VPN)

  1. Create a local CA, e.g. name nac-ca, common name "Korthveil NAC CA". Its key never leaves the firewall and is never downloadable.
  2. Issue from a local CA for the server: e.g. nac-radius, use Server, and DNS name radius.korthveil.lan.
  3. Issue from a local CA for each device: e.g. laptop-1, use Client (VPN users, devices).
  4. In the Store, click .p12 on the device's row. A file laptop-1.p12 downloads, and a password is shown once. Copy it to the device, install it with that password, and delete the file. The download is recorded in the Audit log (certificate.download-key).
  5. Download the CA certificate (the download icon on nac-ca). Devices need it to check the server: on Windows it goes in Trusted Root, on macOS and iOS in the profile, on Android under "CA certificate".

Only Client certificates can be downloaded with their key. Server certificates, CAs, and the web console's certificate cannot.

6. Troubleshooting

Message Meaning
"a certificate named X exists; choose Replace…" You imported the same name again; tick Replace for a renewal
"the bundle has no private key for X, and no certificate request on this firewall matches it" The key was made elsewhere: add the .key file, or a .pfx with its password
"the private key is encrypted" Export it unencrypted, or as a .pfx
"only device (client) certificates can be downloaded with their key" Expected for server certificates and CAs
"certificate in use by …" when deleting Choose another certificate there first

See also: adr/0026 (certificate store), adr/0057 (bundles, device downloads, certificates for add-ins).