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

F5 BIG-IP: SSL-certifikat via ACME og iControl REST

F5 BIG-IP har ikke en indbygget ACME-klient, men det velprøvede iControl REST API gør automatiseringen enkel. Vi udsteder certifikatet på en proxy-vært via Lego og FairSSL AutoDNS, og uploader det til F5 med en deploy-hook der opdaterer Client SSL-profilen.

Sådan er løsningen sat op

  • En proxy-vært (Linux, fx en eksisterende management-server) kører Lego v5.0.4+.
  • Lego udsteder certifikatet via FairSSL AutoDNS. Ingen DNS-API-adgang nødvendig.
  • Et deploy-hook uploader cert + nøgle via iControl REST og opdaterer Client SSL-profilen.
  • Hvis F5 kører som HA-par, kalder scriptet ConfigSync til standby.
  • Cron kører Lego dagligt. ARI styrer fornyelsen.

Opsætning

Trin 1: Opret iControl REST-bruger på F5

I BIG-IP webgrænsefladen: gå til System → Users → User List og opret en lokal bruger (fx acme-deploy) med rollen Certificate Manager for partition Common (eller den partition, hvor jeres SSL-profiler ligger). Brug en stærk adgangskode.

Trin 2: Installer Lego

arch=$(dpkg --print-architecture)
case "$arch" in amd64|arm64) ;; *) echo "Ret 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 install -d -m 0700 /etc/ssl/f5

Trin 3: Opret deploy-script

Scriptet uploader cert og nøgle med POST /mgmt/shared/file-transfer/uploads, opretter eller opdaterer ssl-cert- og ssl-key-objekter via cmd=install, og opdaterer Client SSL-profilen. Tilføj eventuelt en ConfigSync-blok hvis I kører HA.

sudo tee /usr/local/bin/f5-deploy.sh > /dev/null << 'SCRIPT'
#!/bin/bash
set -euo pipefail
F5_HOST="bigip.eksempel.dk"
F5_USER="acme-deploy"
F5_PASS="DIT_API_KODE"
CERT_NAME="fairssl-acme-cert"
KEY_NAME="fairssl-acme-key"
PROFILE="fairssl-clientssl"   # Client SSL profile name in partition Common

CERT="$LEGO_HOOK_CERT_PATH"
KEY="$LEGO_HOOK_CERT_KEY_PATH"

# 1. Upload cert + key til /var/config/rest/downloads
curl -sS -k --user "$F5_USER:$F5_PASS" \
  -H "Content-Type: application/octet-stream" \
  -H "Content-Range: 0-$(($(stat -c%s "$CERT")-1))/$(stat -c%s "$CERT")" \
  --data-binary "@$CERT" \
  "https://$F5_HOST/mgmt/shared/file-transfer/uploads/$CERT_NAME.crt"

curl -sS -k --user "$F5_USER:$F5_PASS" \
  -H "Content-Type: application/octet-stream" \
  -H "Content-Range: 0-$(($(stat -c%s "$KEY")-1))/$(stat -c%s "$KEY")" \
  --data-binary "@$KEY" \
  "https://$F5_HOST/mgmt/shared/file-transfer/uploads/$KEY_NAME.key"

# 2. Installer cert + key som objekter (overskriver hvis de findes)
curl -sS -k --user "$F5_USER:$F5_PASS" \
  -H "Content-Type: application/json" \
  -d "{ \"command\": \"install\", \"name\": \"$CERT_NAME\", \"from-local-file\": \"/var/config/rest/downloads/$CERT_NAME.crt\" }" \
  "https://$F5_HOST/mgmt/tm/sys/crypto/cert"

curl -sS -k --user "$F5_USER:$F5_PASS" \
  -H "Content-Type: application/json" \
  -d "{ \"command\": \"install\", \"name\": \"$KEY_NAME\", \"from-local-file\": \"/var/config/rest/downloads/$KEY_NAME.key\" }" \
  "https://$F5_HOST/mgmt/tm/sys/crypto/key"

# 3. Opdater Client SSL-profilen
curl -sS -k --user "$F5_USER:$F5_PASS" \
  -X PATCH -H "Content-Type: application/json" \
  -d "{ \"cert\": \"$CERT_NAME\", \"key\": \"$KEY_NAME\" }" \
  "https://$F5_HOST/mgmt/tm/ltm/profile/client-ssl/~Common~$PROFILE"

# 4. (Valgfri) ConfigSync til standby i et HA-par
# curl -sS -k --user "$F5_USER:$F5_PASS" \
#   -H "Content-Type: application/json" \
#   -d '{"command": "run", "utilCmdArgs": "config-sync to-group /Common/device-trust-group"}' \
#   "https://$F5_HOST/mgmt/tm/cm"
SCRIPT
sudo chmod 700 /usr/local/bin/f5-deploy.sh

Trin 4: Udsted certifikatet

sudo /usr/local/bin/lego run \
  --domains "vip.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/f5" \
  --deploy-hook "/usr/local/bin/f5-deploy.sh"

Trin 5: Planlæg dagligt

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

Trin 6: Verificér

  • I BIG-IP webgrænsefladen under System → Certificate Management → Traffic Certificate Management → SSL Certificate List: bekræft at fairssl-acme-cert findes med den nye udløbsdato.
  • Under Local Traffic → Profiles → SSL → Client: bekræft at fairssl-clientssl-profilen bruger det nye cert + key.
  • Test offentligt med FairSSLs SSL-scanner.
  • HA-opsætninger: bekræft via standby BIG-IP at konfigurationen er synkroniseret.

Ofte stillede spørgsmål

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

iControl REST er F5s REST API til BIG-IP. Det dækker hele konfigurationsfladen, inklusive SSL-certifikatadministration via /mgmt/tm/sys/file/ssl-cert og /mgmt/tm/sys/file/ssl-key. API'et er aktiveret som standard på alle moderne BIG-IP-versioner og bruges af F5s officielle Ansible-moduler, Terraform-provider og en lang række automationsværktøjer.
iControl REST er mest fleksibelt og kan kaldes fra en hvilken som helst host med curl. tmsh er bedre, hvis du allerede står på selve BIG-IP-boksen eller har en bastion. Vores eksempel bruger iControl REST, fordi proxy-værten ligger uden for F5.
Opret en dedikeret iControl REST-bruger med rollen Certificate Manager (eller Administrator hvis I ikke har granulære roller). Brugeren skal kunne uploade filer, oprette og opdatere ssl-cert og ssl-key, samt opdatere Client SSL-profilen. Brug en stærk adgangskode og gem det med restriktiv læseadgang (chmod 600) på proxy-værten.
Når certifikatet og nøglen er uploadet, opdaterer scriptet Client SSL-profilen via PATCH /mgmt/tm/ltm/profile/client-ssl/<profile> med de nye cert- og key-felter. Eksisterende virtuelle servere, der bruger profilen, får automatisk det nye certifikat, så snart F5 har genindlæst profilen.
Upload til den aktive enhed og kør derefter POST /mgmt/tm/cm/config-sync for at synkronisere konfigurationen til standby. Vores eksempelscript dækker den enkelte enhed; tilføj sync-kommandoen, hvis I har HA. ConfigSync overfører både certifikatfiler og profilopdateringen.
Lego kører dagligt. Når ARI eller den indbyggede 7-dages fallback udløser fornyelse, hentes et nyt certifikat, og deploy-hooket uploader filerne, opdaterer Client SSL-profilen og synkroniserer (hvis HA). Virtuelle servere begynder at servere det nye certifikat ved næste forbindelse, uden at de selv genstartes.

Klar til at automatisere F5-certifikater?

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