SSL-certifikaternes maksimale levetid reduceres til 200 dage fra marts 2026. Læs mere →

Fortinet ACME-certifikater: FortiGate, FortiMail og FortiWeb

FortiOS 7.6.3 og nyere har en indbygget ACME-klient med External Account Binding (EAB), hvilket gør det muligt for FortiGate selv at hente og forny certifikater fra FairSSL. Ældre FortiGate-versioner kræver en ekstern proxy-server med Lego eller simple-acme, der overfører certifikatet via SSH. Begge metoder gennemgås her.

Hvilken tilgang skal du bruge?

Anbefalet FortiOS 7.6.3+

Indbygget ACME på FortiGate

FortiGate kører selv ACME-klienten. Du registrerer et lokalt certifikatobjekt med EAB-nøgler, og FortiOS håndterer udstedelse og automatisk fornyelse. Ingen ekstra host nødvendig.

Gå til indbygget opsætning →
Fallback Alt før 7.6.3

Proxy via Lego eller simple-acme

En lille Linux- eller Windows-host udsteder certifikatet og overfører det til FortiGate via SSH eller REST API. Samme tilgang virker også til FortiMail og FortiWeb, der ikke har indbygget ACME.

Gå til proxy-opsætning →

Indbygget ACME (FortiOS 7.6.3+)

FortiGates indbyggede ACME-klient understøtter External Account Binding, hvilket er kravet for at hente certifikater fra en kommerciel CA som FairSSL. Hele opsætningen sker via CLI.

Trin 1:Verificér firmware

Log ind på FortiGate via SSH eller GUI-konsollen og tjek versionen. EAB-understøttelse kræver 7.6.3 eller nyere.

get system status

Trin 2:Konfigurér FairSSL AutoDNS

Log ind på dit FairSSL-kontrolpanel, gå til AutoDNS, og opret en CNAME-viderestilling for _dnsauth.<dit-domæne> til FairSSLs DNS-server. AutoDNS svarer på selve ACME-challengen, så FortiGate behøver ikke åbne port 80 mod internettet. Se den fulde AutoDNS-vejledning.

Trin 3:Opret det lokale ACME-certifikatobjekt

Hent EAB KID og HMAC-nøglen fra ACME-fanen i dit FairSSL-kontrolpanel. Erstat værdierne nedenfor og kør i FortiGate CLI.

config vpn certificate local
    edit "fairssl-vpn-cert"
        set enrollment acme
        set acme-ca-url https://fairssl.dk/acme
        set acme-eab-key-id DIN_EAB_KID
        set acme-eab-key-hmac DIN_EAB_HMAC
        set acme-email acme-client@fairssl.dk
        set acme-domain vpn.eksempel.dk
        set acme-auth-url "http://vpn.eksempel.dk/.well-known/acme-challenge"
        set auto-regenerate-days 30
        set auto-regenerate enable
    next
end

auto-regenerate-days 30 betyder, at FortiGate forsøger at forny 30 dage før udløb. Det er sikkert for både 90-dages og 47-dages certifikater. Sæt acme-domain til præcis det FQDN, certifikatet skal udstedes til. FortiGates indbyggede ACME-flow er tiltænkt et enkelt FQDN. Brug proxy-løsningen til wildcard eller flere SAN.

Trin 4:Udsted certifikatet

execute vpn certificate local generate "fairssl-vpn-cert"

FortiGate kontakter FairSSLs ACME-server, validerer ejerskab via AutoDNS og henter certifikatet. Hele flowet tager normalt under 30 sekunder.

Trin 5:Verificér status

get vpn certificate local | grep -A 3 "fairssl-vpn-cert"

Forvent Status: OK og en gyldighedsperiode der matcher certifikatets levetid (typisk 47-90 dage).

Trin 6:Bind certifikatet til services

Brug det lokale certifikatobjekt til SSL VPN, admin HTTPS, eller andre services. Du kan binde det samme objekt til flere services - alle bindinger får automatisk det fornyede certifikat.

# SSL VPN
config vpn ssl settings
    set servercert "fairssl-vpn-cert"
end

# Admin HTTPS (valgfri)
config system global
    set admin-server-cert "fairssl-vpn-cert"
end

Tjek bagefter med FairSSLs SSL-scanner at det rigtige certifikat serveres på det offentlige FQDN.

Proxy-opsætning (FortiGate < 7.6.3, FortiMail, FortiWeb)

Når enheden ikke selv kan køre ACME, udsteder vi certifikatet på en separat Linux- eller Windows-host og overfører det via SSH eller REST API. Linux-varianten med Lego er den mest fleksible og bruges også til FortiMail og FortiWeb.

Linux-host med Lego og SSH

En lille Linux-server (Debian, Ubuntu eller RHEL) udsteder certifikatet via Lego v5.0.4 eller nyere og overfører PEM-filerne til FortiGate via SSH med sshpass. Ældre Lego-versioner er ikke ARI-bevidste og fungerer ikke pålideligt med EAB-konti, så hold dig til v5.0.4+.

# 1. Installer Lego og sshpass

arch=$(dpkg --print-architecture)
case "$arch" in amd64|arm64) ;; *) echo "Skift arch"; exit 1 ;; esac
version=$(curl -fsSL https://api.github.com/repos/go-acme/lego/releases/latest \
  | sed -n 's/.*"tag_name": "\(v[^"]*\)".*/\1/p' | head -1)
curl -fL "https://github.com/go-acme/lego/releases/download/${version}/lego_${version}_linux_${arch}.tar.gz" \
  | sudo tar -xz -C /usr/local/bin lego
sudo apt-get install -y sshpass
sudo install -d -m 0700 /etc/ssl/fortigate

# 2. Opret deploy-script (gem som /usr/local/bin/fortigate-deploy.sh)

#!/bin/bash
set -euo pipefail
FGT_IP="10.0.0.1"
FGT_USER="admin"
FGT_PASS="DIN_SSH_KODE"
CERT_NAME="fairssl-vpn-cert"

CERT=$(cat "$LEGO_HOOK_CERT_PATH")
KEY=$(cat "$LEGO_HOOK_CERT_KEY_PATH")
SSH="sshpass -p $FGT_PASS ssh -T -o StrictHostKeyChecking=no $FGT_USER@$FGT_IP"

$SSH <<EOF
config vpn certificate local
edit "$CERT_NAME"
set private-key "$KEY"
set certificate "$CERT"
next
end
config vpn ssl settings
set servercert "$CERT_NAME"
end
EOF

# 3. Udsted certifikatet (EAB-nøgler kun ved første kørsel)

sudo /usr/local/bin/lego run \
  --domains "vpn.eksempel.dk" \
  --server https://fairssl.dk/acme \
  --eab --eab.kid DIN_EAB_KID --eab.hmac DIN_EAB_HMAC \
  --accept-tos --email acme-client@fairssl.dk \
  --http --http.webroot "/var/www/html" \
  --path "/etc/ssl/fortigate" \
  --deploy-hook "/usr/local/bin/fortigate-deploy.sh"

# 4. Cron-fornyelse, kør dagligt på et tilfældigt tidspunkt

# /etc/cron.d/lego-fortigate (eksempel)
17 04 * * * root /usr/local/bin/lego run \
  --domains "vpn.eksempel.dk" \
  --server https://fairssl.dk/acme \
  --accept-tos --email acme-client@fairssl.dk \
  --http --http.webroot "/var/www/html" \
  --path "/etc/ssl/fortigate" \
  --renew-days 7 \
  --deploy-hook "/usr/local/bin/fortigate-deploy.sh"

Lego v5+ kører run dagligt og bruger ARI til at afgøre, hvornår der skal fornys. Hvis ACME-serveren ikke svarer, eller ARI ikke peger på fornyelse, falder den tilbage til at forny ved 7 dage tilbage af certifikatet. Deploy-hooket aktiveres kun, når der faktisk fornys.

Windows-host med simple-acme

Hvis du ikke har en Linux-server, kan opsætningen laves på Windows med simple-acme og Posh-SSH. Installer FairSSL-udgaven af simple-acme (forudkonfigureret med korrekte indstillinger og Deploy-FortiGate.ps1 i Scripts-mappen).

# PowerShell, Run as Administrator

Install-Module Posh-SSH, CredentialManager -Force -Scope CurrentUser

New-StoredCredential -Target "FortiGate-acme-user" `
  -UserName "admin" -Password "DIN_SSH_KODE" -Persist LocalMachine

cd C:\simple-acme
wacs.exe --verbose --baseuri "https://fairssl.dk/acme" `
  --eab-key-identifier DIN_EAB_KID --eab-key DIN_EAB_HMAC --accepttos `
  --source manual --host "vpn.eksempel.dk" --validation none `
  --store pemfiles --pemfilespath "C:\simple-acme\Certificates" `
  --pemfilesname "vpn-eksempel-dk" --friendlyname "fairssl-vpn-cert" `
  --installation script --script ".\Scripts\Deploy-FortiGate.ps1" `
  --scriptparameters "-StorePath 'C:\simple-acme\Certificates' -FilePrefix 'vpn-eksempel-dk' -FirewallHost '10.0.0.1' -CertLabel 'fairssl-vpn-cert' -CredentialTarget 'FortiGate-acme-user'"

Tilføj -UpdateAdmin inde i --scriptparameters, hvis admin HTTPS også skal bruge certifikatet. simple-acme opretter automatisk et planlagt opgave der kører dagligt og fornyer når ARI eller 7-dages-fallback siger til.

FortiMail og FortiWeb

Begge enheder bruger samme grundlæggende mønster: ekstern host udsteder certifikat, deploy-hook overfører ind via REST API. FairSSL-kontrolpanelet under ACME Easy Guides har færdige scripts til både FortiMail (Linux + Windows) og FortiWeb (Windows). Logik og struktur er identisk med FortiGate-eksemplerne ovenfor; det er kun de konkrete API-kald og endpointet for selve installationen, der er forskellige.

Fejlfinding

Status forbliver Pending

Tjek at _dnsauth.<domæne> er konfigureret som CNAME til FairSSLs DNS-server. Kør dig _dnsauth.dit-domæne.dk CNAME for at verificere. Genstart udstedelsen med execute vpn certificate local renew <navn>.

Lego svarer account does not exist

Dette skyldes sandsynligvis en ældre Lego-version. Opgrader til v5.0.4+ og kør udstedelseskommandoen igen med samme --path. Hvis fejlen fortsætter, slet mappen /etc/ssl/fortigate/accounts og kør trin 3 forfra med EAB-nøglerne.

SSH-deploy fejler med Host key verification failed

Første gang skal du acceptere FortiGates SSH host key. Kør ssh admin@<fortigate-ip> manuelt fra deploy-serveren og bekræft fingerprintet. Alternativt kan du tilføje host key til ~/.ssh/known_hosts på forhånd.

SSL VPN viser stadig det gamle certifikat efter deploy

SSL VPN-tjenesten cacher certifikatet i hukommelsen. Deploy-scriptet håndterer dette ved først at sætte servercert til self-sign (eller et andet midlertidigt certifikat) og dernæst tilbage til det nye. Hvis du har skiftet certifikatet manuelt, så gentag de to config vpn ssl settings-blokke i deploy-scriptet.

Ofte stillede spørgsmål

Find svar på de mest almindelige spørgsmål om SSL certifikater og FairSSL.

Indbygget ACME med External Account Binding kræver FortiOS 7.6.3 eller nyere. Tidligere 7.6-versioner understøttede ACME, men uden EAB, hvilket gør dem ubrugelige i forbindelse med kommercielle CA'er som FairSSL. Ældre FortiGate-enheder (alt før 7.6.3) skal bruge proxy-løsningen med en Linux- eller Windows-server.
Nej. FairSSL AutoDNS validerer domænet via DNS-01-challenges på vores side, så FortiGate ikke behøver at eksponere port 80 mod internettet. acme-auth-url-feltet skal dog stadig konfigureres, da FortiOS-CLI'en kræver det, men HTTP-01-valideringen aktiveres aldrig, så længe domænet er konfigureret til AutoDNS-validering i dit FairSSL-kontrolpanel.
Kør get vpn certificate local i CLI. Status skal fremgå som Status: OK med en gyldig udløbsdato. Hvis status er Pending, skal du kontrollere, at domænet er konfigureret korrekt under AutoDNS i dit FairSSL-kontrolpanel, og derefter køre execute vpn certificate local renew <navn>.
FortiOS 7.6.3 understøtter standard ACME, men ARI-understøttelsen er fortsat begrænset. Hvis du sætter auto-regenerate-days til 30, fornyer FortiGate certifikatet 30 dage før udløb, hvilket er tilstrækkeligt for både 90-dages og 47-dages certifikater. For fuld ARI-understøttelse er proxy-løsningen via Lego eller simple-acme stadig mere fleksibel.
FortiMail har ingen indbygget ACME-klient og håndteres altid via proxy-løsningen. FortiWeb 8.0.3 og nyere har indbygget ACME med EAB, så her er proxy-løsningen primært relevant for ældre FortiWeb-versioner, eller når man vil bruge FairSSLs færdige deploy-script. Begge har veldokumenterede REST API'er, så en ekstern server kan udstede certifikatet via Lego eller simple-acme og overføre det via API'et. Vi har færdige eksempelskripter til begge platforme i FairSSL-kontrolpanelet under "ACME Easy Guides".
Du skal kun bruge dem ved den første registrering. FortiGate gemmer ACME-kontoen internt, og fremtidige fornyelser anvender denne eksisterende konto. Ved proxy-løsningen gemmer Lego eller simple-acme tilsvarende kontoen lokalt i den mappe, der er angivet med --path. Gem alligevel EAB-nøglerne et sikkert sted som backup, hvis du senere får brug for at genskabe opsætningen.
Ja. FortiGate kan binde det samme lokale certifikatobjekt til flere tjenester. For SSL VPN: config vpn ssl settings, set servercert "navn", end. For admin HTTPS: config system global, set admin-server-cert "navn", end. Når certifikatet fornyes, opdateres begge bindinger automatisk.

Klar til at automatisere FortiGate-certifikater?

Opret en gratis konto og udsted dit første certifikat på under 10 minutter.