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

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

F5 BIG-IP har ingen inbyggd ACME-klient, men det väl beprövade iControl REST API gör automatiseringen enkel. Vi utfärdar certifikatet på en proxy-värd via Lego och FairSSL Auto DNS, och laddar upp det till F5 med en deploy-hook som uppdaterar Client SSL-profilen.

Så är lösningen uppsatt

  • En proxy-värd (Linux, t.ex. en befintlig managementserver) kör Lego v5.0.4+.
  • Lego utfärdar certifikatet via FairSSL Auto DNS. Ingen DNS API-åtkomst behövs.
  • En deploy-hook laddar upp cert + nyckel via iControl REST och uppdaterar Client SSL-profilen.
  • Om F5 körs som HA-par anropar skriptet ConfigSync till standby.
  • cron kör Lego dagligen. ARI styr förnyelsen.

Uppsättning

Steg 1: Skapa iControl REST-användare på F5

I BIG-IP webbgränssnittet: gå till System → Users → User List och skapa en lokal användare (t.ex. acme-deploy) med rollen Certificate Manager för partition Common (eller den partition där era SSL-profiler ligger). Använd ett starkt lösenord.

Steg 2: Installera Lego

arch=$(dpkg --print-architecture)
case "$arch" in amd64|arm64) ;; *) echo "Justera 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

Steg 3: Skapa deploy-skript

Skriptet laddar upp cert och nyckel med POST /mgmt/shared/file-transfer/uploads, skapar eller uppdaterar ssl-cert- och ssl-key-objekt via cmd=install, och uppdaterar Client SSL-profilen. Lägg ev. till ett ConfigSync-block om ni kör HA.

sudo tee /usr/local/bin/f5-deploy.sh > /dev/null << 'SCRIPT'
#!/bin/bash
set -euo pipefail
F5_HOST="bigip.exempel.se"
F5_USER="acme-deploy"
F5_PASS="DITT_API_LOSENORD"
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. Ladda upp cert + key till /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. Installera cert + key som objekt (skriver över om de finns)
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. Uppdatera 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. (Valfri) ConfigSync till standby i ett 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

Steg 4: Utfärda certifikatet

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

Steg 5: Schemalägg dagligen

# /etc/cron.d/lego-f5
17 04 * * * root /usr/local/bin/lego run \
  --domains "vip.exempel.se" \
  --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"

Steg 6: Verifiera

  • I BIG-IP webbgränssnittet under System → Certificate Management → Traffic Certificate Management → SSL Certificate List: bekräfta att fairssl-acme-cert finns med det nya utgångsdatumet.
  • Under Local Traffic → Profiles → SSL → Client: bekräfta att fairssl-clientssl-profilen använder det nya cert + key.
  • Testa publikt med FairSSLs SSL-skanner.
  • HA-driftsättningar: bekräfta från standby BIG-IP att konfigurationen är synkroniserad.

Vanliga frågor

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

iControl REST är F5:s REST API för BIG-IP. Det täcker hela konfigurationsytan, inklusive SSL-certifikathantering via /mgmt/tm/sys/file/ssl-cert och /mgmt/tm/sys/file/ssl-key. API:t är aktiverat som standard på alla moderna BIG-IP-versioner och används av F5:s officiella Ansible-moduler, Terraform-provider och många andra automationsverktyg.
iControl REST är mest flexibelt och kan anropas från valfri värd med curl. tmsh passar bättre om du redan står på själva BIG-IP-enheten eller har en bastion. Vårt exempel använder iControl REST, eftersom proxy-värden ligger utanför F5.
Skapa en dedikerad iControl REST-användare med rollen Certificate Manager (eller Administrator om ni inte har granulära roller). Användaren ska kunna ladda upp filer, skapa och uppdatera ssl-cert och ssl-key, samt uppdatera Client SSL-profilen. Använd ett starkt lösenord och spara det med restriktiv läsåtkomst (chmod 600) på proxy-värden.
När certifikatet och nyckeln är uppladdade uppdaterar skriptet Client SSL-profilen via PATCH /mgmt/tm/ltm/profile/client-ssl/<profile> med de nya cert- och key-fälten. Befintliga virtuella servrar som använder profilen får automatiskt det nya certifikatet så snart F5 har laddat om profilen.
Ladda upp till den aktiva enheten och kör därefter POST /mgmt/tm/cm/config-sync för att synka konfigurationen till standby. Vårt exempelskript täcker den enskilda enheten; lägg till sync-kommandot om ni har HA. ConfigSync överför både certifikatfiler och profiluppdateringen.
Lego körs dagligen. När ARI eller den inbyggda 7-dagars fallback utlöser förnyelse hämtas ett nytt certifikat och deploy-hooken laddar upp filerna, uppdaterar Client SSL-profilen och synkroniserar (om HA). Virtuella servrar börjar servera det nya certifikatet vid nästa anslutning, utan att de själva startas om.

Redo att automatisera F5-certifikat?

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