Fortinet ACME-certifikat: FortiGate, FortiMail och FortiWeb
FortiOS 7.6.3 och senare har en inbyggd ACME-klient med External Account Binding (EAB), så att FortiGate själv kan hämta och förnya certifikat från FairSSL. Äldre FortiOS-versioner behöver en extern proxyserver med Lego eller simple-acme som för över certifikatet via SSH. Guiden beskriver båda metoderna.
Versioner som stöds
| Plattform | Versioner | Körs på | ACME-klient |
|---|---|---|---|
| FortiGate | VersionerFortiOS 7.6.3 och senare | Körs påEnheten själv | ACME-klientEnhetens inbyggda ACME-klient med EAB |
| FortiGate | VersionerFortiOS före 7.6.3 | Körs påWindows Server 2016 eller senare, eller 2012/2012 R2 med WMF 5.1 (PowerShell 5.1) | ACME-klientsimple-acme 2.4.0+ (FairSSL-utgåvan, .NET 10 ingår) + Posh-SSH, CredentialManager |
| FortiGate | VersionerFortiOS före 7.6.3 | Körs påEn Linux-server som skickar certifikatet till enheten | ACME-klientlego 5.0.4+ |
| FortiMail | VersionerGuiden sätter ingen versionsgräns | Körs påWindows Server 2016 eller senare, eller 2012/2012 R2 med WMF 5.1 (PowerShell 5.1) | ACME-klientsimple-acme 2.4.0+ (FairSSL-utgåvan, .NET 10 ingår) + Posh-SSH, CredentialManager |
| FortiMail | VersionerGuiden sätter ingen versionsgräns | Körs påEn Linux-server som skickar certifikatet till enheten | ACME-klientlego 5.0.4+ |
| FortiWeb | VersionerGuiden sätter ingen versionsgräns | Körs påWindows Server 2016 eller senare, eller 2012/2012 R2 med WMF 5.1 (PowerShell 5.1) | ACME-klientsimple-acme 2.4.0+ (FairSSL-utgåvan, .NET 10 ingår) + FortiWeb REST API, CredentialManager |
Vilken metod ska du välja?
Inbyggd ACME på FortiGate
FortiGate kör ACME-klienten själv. Du skapar ett lokalt certifikatobjekt med EAB-nycklar, och FortiOS sköter utfärdande och automatisk förnyelse. Ingen extra server behövs.
Till inbyggd ACME →Proxy med Lego eller simple-acme
En liten Linux- eller Windows-server utfärdar certifikatet och för över det till FortiGate via SSH eller REST API. Samma lösning fungerar även för FortiMail och för FortiWeb-versioner utan inbyggd ACME.
Till proxy-lösningen →Inbyggd ACME (FortiOS 7.6.3+)
FortiGates inbyggda ACME-klient stöder External Account Binding, som krävs för att hämta certifikat från FairSSL. Allt konfigureras i CLI.
Steg 1: Kontrollera FortiOS-versionen
Logga in på FortiGate via SSH eller konsolen i webbgränssnittet och kontrollera versionen. EAB kräver FortiOS 7.6.3 eller senare.
get system status Steg 2: Konfigurera FairSSL AutoDNS
Logga in på din FairSSL-kontrollpanel, gå till AutoDNS och skapa en CNAME-post för
_dnsauth.<din-domän> som pekar på FairSSL:s DNS-server. AutoDNS svarar på
ACME-utmaningen, så FortiGate behöver inte öppna port 80 mot internet. Läs mer i
AutoDNS-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 kommandona 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 börjar förnya 30 dagar före utgångsdatum. Det
räcker både för dagens maximala livslängd på 199 dagar och för 99 dagar från 15 mars 2027. Sätt acme-domain
till exakt det FQDN som certifikatet ska utfärdas för. FortiGates inbyggda ACME hanterar ett enda FQDN, så
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 via AutoDNS att du äger domänen och hämtar certifikatet. Det tar normalt under 30 sekunder.
Steg 5: Kontrollera status
get vpn certificate local | grep -A 3 "fairssl-vpn-cert"
Du ska se Status: OK och en giltighetsperiod som stämmer med certifikatets livslängd (högst 199 dagar, högst 99 dagar från 15 mars 2027).
Steg 6: Koppla certifikatet till tjänster
Använd det lokala certifikatobjektet för SSL VPN, admin HTTPS eller andra tjänster. Du kan koppla samma objekt till flera tjänster, och alla bindningar får det förnyade certifikatet automatiskt.
# 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 sedan med FairSSL:s SSL-skanner att det publika FQDN svarar med rätt certifikat.
Proxy-lösning (FortiGate < 7.6.3, FortiMail, FortiWeb)
När enheten inte kan köra ACME själv utfärdas certifikatet på en separat Linux- eller Windows-server och förs över via SSH eller REST API. Linux-varianten med Lego är mest flexibel 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 med Lego och för över PEM-filerna
till FortiGate via SSH med sshpass. Kommandona nedan kräver Lego v5.0.4 eller senare. Tidiga
v5-versioner hade problem med registrering och hooks, och kommandona för v4 ser annorlunda ut, så använd 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 skriptet för deploy-hook (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-nycklarna behövs bara 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. Daglig förnyelse via cron (välj en 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"
Cron kör lego run varje dag, och Lego v5+ använder ARI för att avgöra när det är dags att förnya.
Svarar inte ACME-servern, eller anger ARI ingen förnyelse, förnyar Lego när 7 dagar återstår. Skriptet i
--deploy-hook körs bara när certifikatet faktiskt har förnyats.
Windows-server med simple-acme
Har du ingen Linux-server fungerar samma lösning på Windows med simple-acme och Posh-SSH. Installera
FairSSL-utgåvan av simple-acme,
som redan har rätt inställningar och Deploy-FortiGate.ps1 i mappen Scripts.
# PowerShell, kör som administratör
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 i --scriptparameters om admin HTTPS också ska
använda certifikatet. simple-acme skapar automatiskt en schemalagd aktivitet som körs varje dag 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 hanteras på samma sätt: en extern server utfärdar certifikatet, och en deploy-hook för över det via REST API. Under ACME Easy Guides i FairSSL-kontrollpanelen finns färdiga skript för FortiMail (Linux och Windows) och FortiWeb (Windows). Upplägget är detsamma som i FortiGate-exemplen ovan. Det som skiljer är API-anropen och den endpoint som installerar certifikatet.
Felsökning
Status står kvar på Pending
Kontrollera att _dnsauth.<domän> är en CNAME-post som pekar på FairSSL:s DNS-server. Du kan kontrollera det med dig _dnsauth.din-domän.se CNAME. Starta sedan utfärdandet igen med execute vpn certificate local renew <namn>.
Lego svarar account does not exist
Felet beror oftast på en äldre Lego-version. Uppgradera till v5.0.4 eller senare och kör kommandot i steg 3 igen med samma --path. Kvarstår felet, ta bort mappen /etc/ssl/fortigate/accounts och kör steg 3 igen med EAB-nycklarna.
Överföringen via SSH misslyckas med Host key verification failed
Första gången måste du godkänna FortiGates värdnyckel för SSH. Kör ssh admin@<fortigate-ip> manuellt från servern som kör skriptet och bekräfta fingeravtrycket, eller lägg in värdnyckeln i ~/.ssh/known_hosts i förväg.
SSL VPN visar fortfarande det gamla certifikatet efter bytet
SSL VPN-tjänsten håller certifikatet i minnet. FairSSL:s fullständiga skript i kontrollpanelen löser det genom att först sätta servercert till self-sign och sedan tillbaka till det nya certifikatet. Använder du ett eget eller förenklat skript måste det göra samma växling.
Certifikat på många servrar och appliances
Ett offentligt SSL-certifikat får vara giltigt i högst 199 dagar nu, 99 dagar senast 2027-03-15 och 46 dagar senast 2029-03-15. Varje certifikat måste då bytas minst två gånger om året nu och minst åtta gånger om året från 2029, på varje server, brandvägg och lastbalanserare där det används. sslbrain från FairSSL körs som en appliance i ert eget nätverk och förnyar och installerar certifikaten från ett ställe, även på utrustning utan agent.
Så förnyar och installerar sslbrain certifikat på FortiGate(öppnar sslbrain.com i en ny flik)Vanliga frågor
Hitta svar på de vanligaste frågorna om SSL-certifikat och FairSSL.
acme-auth-url måste ändå fyllas i eftersom FortiOS CLI kräver det, men HTTP-01 används aldrig så länge domänen är inställd på AutoDNS-validering i din FairSSL-kontrollpanel.get vpn certificate local i CLI. Där ska det stå Status: OK och ett giltigt utgångsdatum. Står det Pending, kontrollera att domänen är rätt konfigurerad under AutoDNS i din FairSSL-kontrollpanel och kör sedan execute vpn certificate local renew <namn>.auto-regenerate-days till 30 förnyar FortiGate certifikatet 30 dagar före utgångsdatum. Det räcker både för dagens maximala livslängd på 199 dagar och för gränsen på 99 dagar som gäller från 15 mars 2027. Vill du ha fullt ARI-stöd är proxy-lösningen med Lego eller simple-acme mer flexibel.--path, och simple-acme sparar det på motsvarande sätt. Spara ändå EAB-nycklarna på ett säkert ställe ifall du senare behöver bygga upp lösningen igen.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 beställ ditt första certifikat. Ett DV-certifikat utfärdas på under 2 minuter.