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.
Understøttede versioner
| Platform | Versioner | Kører på | ACME-klient |
|---|---|---|---|
| FortiGate | VersionerFortiOS 7.6.3 og nyere | Kører påEnheden selv | ACME-klientEnhedens indbyggede ACME-klient med EAB |
| FortiGate | VersionerFortiOS før 7.6.3 | Kører påWindows Server 2016 eller nyere, eller 2012/2012 R2 med WMF 5.1 (PowerShell 5.1) | ACME-klientsimple-acme 2.4.0+ (FairSSL-udgaven, .NET 10 medfølger) + Posh-SSH, CredentialManager |
| FortiGate | VersionerFortiOS før 7.6.3 | Kører påEn Linux-server, som sender certifikatet til enheden | ACME-klientlego 5.0.4+ |
| FortiMail | VersionerGuiden sætter ingen versionsgrænse | Kører påWindows Server 2016 eller nyere, eller 2012/2012 R2 med WMF 5.1 (PowerShell 5.1) | ACME-klientsimple-acme 2.4.0+ (FairSSL-udgaven, .NET 10 medfølger) + Posh-SSH, CredentialManager |
| FortiMail | VersionerGuiden sætter ingen versionsgrænse | Kører påEn Linux-server, som sender certifikatet til enheden | ACME-klientlego 5.0.4+ |
| FortiWeb | VersionerGuiden sætter ingen versionsgrænse | Kører påWindows Server 2016 eller nyere, eller 2012/2012 R2 med WMF 5.1 (PowerShell 5.1) | ACME-klientsimple-acme 2.4.0+ (FairSSL-udgaven, .NET 10 medfølger) + FortiWeb REST API, CredentialManager |
Hvilken tilgang skal du bruge?
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 →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.
Certifikater på mange servere og appliances
Et offentligt SSL-certifikat kan højst være gyldigt i 199 dage nu, 99 dage senest 15-03-2027 og 46 dage senest 15-03-2029. Hvert certifikat skal dermed skiftes mindst to gange om året nu og mindst otte gange om året fra 2029, på hver server, firewall og load balancer, det bruges på. sslbrain fra FairSSL kører som en appliance i jeres eget netværk og fornyer og installerer certifikaterne fra ét sted, også på udstyr uden agent.
Sådan fornyer og installerer sslbrain certifikater på FortiGate(åbner sslbrain.com i en ny fane)Ofte stillede spørgsmål
Find svar på de mest almindelige spørgsmål om SSL certifikater og FairSSL.
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.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>.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.--path. Gem alligevel EAB-nøglerne et sikkert sted som backup, hvis du senere får brug for at genskabe opsætningen.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 bestil dit første certifikat. Et DV-certifikat udstedes på under 2 minutter.