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?
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 →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.
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.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>.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.--path. Spara ändå EAB-nycklarna på ett säkert ställe som backup om du senare behöver återskapa uppsättningen.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.