SSL-certifikatens maximala livslängd reduceras till 200 dagar från mars 2026. Läs mer →

Fortinet ACME-certifikat: FortiGate, FortiMail och FortiWeb

FortiOS 7.6.3 och senare har en inbyggd ACME-klient med External Account Binding (EAB), så FortiGate själv kan hämta och förnya certifikat från FairSSL. Äldre FortiGate-versioner kräver en extern proxy-server med Lego eller simple-acme som överför certifikatet via SSH. Båda metoderna gås igenom här.

Vilken metod ska du välja?

Rekommenderas FortiOS 7.6.3+

Inbyggd ACME på FortiGate

FortiGate kör själv ACME-klienten. Du registrerar ett lokalt certifikatobjekt med EAB-nycklar, och FortiOS sköter utfärdande och automatisk förnyelse. Ingen extra server behövs.

Gå till inbyggd uppsättning →
Fallback Allt före 7.6.3

Proxy via Lego eller simple-acme

En liten Linux- eller Windows-server utfärdar certifikatet och överför det till FortiGate via SSH eller REST API. Samma lösning fungerar även för FortiMail och FortiWeb, som inte har inbyggd ACME.

Gå till proxy-uppsättning →

Inbyggd ACME (FortiOS 7.6.3+)

FortiGates inbyggda ACME-klient stödjer External Account Binding, vilket är ett krav för att hämta certifikat från en kommersiell CA som FairSSL. Hela uppsättningen sker via CLI.

Steg 1: Verifiera firmware

Logga in på FortiGate via SSH eller GUI-konsolen och kontrollera versionen. EAB-stöd kräver 7.6.3 eller senare.

get system status

Steg 2: Konfigurera FairSSL Auto DNS

Logga in på din FairSSL-kontrollpanel, gå till Auto DNS och skapa en CNAME-post för _acme-challenge.<din-domän> till FairSSL:s DNS-server. Auto DNS svarar på själva ACME-utmaningen, så FortiGate behöver inte öppna port 80 mot internet. Se den fullständiga Auto DNS-guiden.

Steg 3: Skapa det lokala ACME-certifikatobjektet

Hämta EAB KID och HMAC-nyckeln från ACME-fliken i din FairSSL-kontrollpanel. Byt ut värdena nedan och 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.exempel.se
        set acme-auth-url "http://vpn.exempel.se/.well-known/acme-challenge"
        set auto-regenerate-days 30
        set auto-regenerate enable
    next
end

auto-regenerate-days 30 innebär att FortiGate försöker förnya 30 dagar före utgång. Det är säkert för både 90-dagars och 47-dagars certifikat. Sätt acme-domain till exakt det FQDN som certifikatet ska utfärdas för. FortiGates inbyggda ACME-flöde är avsett för ett enskilt FQDN. Använd proxy-lösningen för wildcard eller flera SAN.

Steg 4: Utfärda certifikatet

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

FortiGate kontaktar FairSSL:s ACME-server, validerar domänägarskap via Auto DNS och hämtar certifikatet. Hela flödet tar normalt under 30 sekunder.

Steg 5: Verifiera status

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

Du ska se Status: OK och en giltighetsperiod som matchar certifikatets livslängd (typiskt 47-90 dagar).

Steg 6: Bind certifikatet till tjänster

Använd det lokala certifikatobjektet för SSL VPN, admin HTTPS eller andra tjänster. Du kan binda samma objekt till flera tjänster. Alla bindningar får automatiskt det förnyade certifikatet.

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

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

Kontrollera därefter med FairSSL:s SSL-skanner att rätt certifikat presenteras på det publika FQDN.

Proxy-uppsättning (FortiGate < 7.6.3, FortiMail, FortiWeb)

När enheten inte själv kan köra ACME utfärdar vi certifikatet på en separat Linux- eller Windows-server och överför det via SSH eller REST API. Linux-varianten med Lego är den mest flexibla och används även för FortiMail och FortiWeb.

Linux-server med Lego och SSH

En liten Linux-server (Debian, Ubuntu eller RHEL) utfärdar certifikatet via Lego v5.0.4 eller senare och överför PEM-filerna till FortiGate via SSH med sshpass. FairSSLs kommandon kräver Lego v5.0.4 eller senare. Tidiga v5-versioner hade registrerings- och hookproblem, och äldre v4-kommandon passar inte de här exemplen, så håll dig till v5.0.4+.

# 1. Installera Lego och sshpass

arch=$(dpkg --print-architecture)
case "$arch" in amd64|arm64) ;; *) echo "Byt 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. Skapa deploy-skript (spara som /usr/local/bin/fortigate-deploy.sh)

#!/bin/bash
set -euo pipefail
FGT_IP="10.0.0.1"
FGT_USER="admin"
FGT_PASS="DITT_SSH_LOSENORD"
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. Utfärda certifikatet (EAB-nycklar endast vid första körningen)

sudo /usr/local/bin/lego run \
  --domains "vpn.exempel.se" \
  --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-förnyelse, kör dagligen vid slumpmässig tidpunkt

# /etc/cron.d/lego-fortigate (exempel)
17 04 * * * root /usr/local/bin/lego run \
  --domains "vpn.exempel.se" \
  --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ör run dagligen och använder ARI för att avgöra när det är dags att förnya. Om ACME-servern inte svarar, eller ARI inte pekar på förnyelse, faller den tillbaka på att förnya när 7 dagar återstår. Deploy-hooken aktiveras endast vid en faktisk förnyelse.

Windows-server med simple-acme

Om du inte har en Linux-server kan uppsättningen göras på Windows med simple-acme och Posh-SSH. Installera FairSSL-utgåvan av simple-acme (förkonfigurerad med rätt inställningar och 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 "DITT_SSH_LOSENORD" -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.exempel.se" --validation none `
  --store pemfiles --pemfilespath "C:\simple-acme\Certificates" `
  --pemfilesname "vpn-exempel-se" --friendlyname "fairssl-vpn-cert" `
  --installation script --script ".\Scripts\Deploy-FortiGate.ps1" `
  --scriptparameters "-StorePath 'C:\simple-acme\Certificates' -FilePrefix 'vpn-exempel-se' -FirewallHost '10.0.0.1' -CertLabel 'fairssl-vpn-cert' -CredentialTarget 'FortiGate-acme-user'"

Lägg till -UpdateAdmin inuti --scriptparameters om admin HTTPS också ska använda certifikatet. simple-acme skapar automatiskt en schemalagd aktivitet som körs dagligen och förnyar när ARI anger att det är dags, eller när mindre än 7 dagar återstår.

FortiMail och FortiWeb

FortiMail och FortiWeb kan båda hanteras med samma grundläggande mönster: en extern server utfärdar certifikatet, och en deploy-hook överför det via REST API. FairSSL-kontrollpanelen under ACME Easy Guides har färdiga skript för både FortiMail (Linux + Windows) och FortiWeb (Windows). Logik och struktur är identiska med FortiGate-exemplen ovan; det är endast de konkreta API-anropen och API-endpointen för själva installationen som skiljer sig åt.

Felsökning

Status förblir Pending

Kontrollera att _acme-challenge.<domän> är konfigurerad som CNAME till FairSSL:s DNS-server. Kör dig _acme-challenge.din-domän.se CNAME för att verifiera. Starta om utfärdandet med execute vpn certificate local renew <namn>.

Lego svarar account does not exist

Detta beror sannolikt på en äldre Lego-version. Uppgradera till v5.0.4+ och kör utfärdandekommandot igen med samma --path. Om felet kvarstår, ta bort mappen /etc/ssl/fortigate/accounts och kör steg 3 från början med EAB-nycklarna.

SSH-deploy misslyckas med Host key verification failed

Första gången måste du acceptera FortiGates SSH host key. Kör ssh admin@<fortigate-ip> manuellt från deploy-servern och bekräfta fingeravtrycket. Alternativt kan du lägga till host key i ~/.ssh/known_hosts i förväg.

SSL VPN visar fortfarande det gamla certifikatet efter deploy

SSL VPN-tjänsten cachar certifikatet i minnet. FairSSLs fullständiga deploy-skript i kontrollpanelen hanterar detta genom att först sätta servercert till self-sign och sedan tillbaka till det nya certifikatet. Om du använder ett eget eller förenklat skript måste samma växling finnas med.

Vanliga frågor

Hitta svar på de vanligaste frågorna om SSL-certifikat och FairSSL.

Inbyggd ACME med External Account Binding kräver FortiOS 7.6.3 eller senare. Tidigare 7.6-versioner hade ACME men utan EAB, vilket gör dem oanvändbara tillsammans med kommersiella CA:er som FairSSL. Äldre FortiGate-enheter (allt före 7.6.3) ska använda proxy-lösningen med en Linux- eller Windows-server.
Nej. FairSSL Auto DNS validerar domänen via DNS-01-validering hos FairSSL, så FortiGate behöver inte exponera port 80 mot internet. Fältet acme-auth-url måste fortfarande konfigureras eftersom FortiOS CLI kräver det, men HTTP-01-flödet används aldrig så länge domänen är inställd för Auto DNS-validering i din FairSSL-kontrollpanel.
Kör get vpn certificate local i CLI. Status ska visas som Status: OK med ett giltigt utgångsdatum. Om status är Pending ska du kontrollera att domänen är korrekt konfigurerad under Auto DNS i din FairSSL-kontrollpanel, och därefter köra execute vpn certificate local renew <namn>.
FortiOS 7.6.3 stödjer standard-ACME, men ARI-stödet är fortfarande begränsat. Om du sätter auto-regenerate-days till 30 förnyar FortiGate certifikatet 30 dagar före utgång, vilket räcker för både 90-dagars och 47-dagars certifikat. För fullt ARI-stöd är proxy-lösningen via Lego eller simple-acme fortfarande mer flexibel.
FortiMail saknar inbyggt ACME-stöd och hanteras alltid via proxy-lösningen. FortiWeb 8.0.3 och senare har inbyggd ACME med EAB, så där är proxy-lösningen främst relevant för äldre FortiWeb-versioner, eller när du vill använda FairSSLs färdiga deploy-skript. Båda har väldokumenterade REST API:er, så en extern server kan utfärda certifikatet via Lego eller simple-acme och föra över det via API:t. Vi har färdiga exempelskript för båda plattformarna i FairSSL-kontrollpanelen under "ACME Easy Guides".
Du behöver dem endast vid den första registreringen. FortiGate sparar ACME-kontot internt, och framtida förnyelser använder det befintliga kontot. Vid proxy-lösningen sparar Lego eller simple-acme på samma sätt kontot lokalt i den katalog som anges med --path. Spara ändå EAB-nycklarna på ett säkert ställe som backup om du senare behöver återskapa uppsättningen.
Ja. FortiGate kan binda samma lokala certifikatobjekt till flera tjänster. För SSL VPN: config vpn ssl settings, set servercert "namn", end. För admin HTTPS: config system global, set admin-server-cert "namn", end. När certifikatet förnyas uppdateras båda bindningarna automatiskt.

Redo att automatisera FortiGate-certifikat?

Skapa ett gratis konto och utfärda ditt första certifikat på under 10 minuter.