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-certfinns 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.
/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.chmod 600) på proxy-värden.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.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.Redo att automatisera F5-certifikat?
Skapa ett gratis konto och utfärda ditt första certifikat på under 10 minuter.