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-certfindes 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.
/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.chmod 600) på proxy-værten.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.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.Klar til at automatisere F5-certifikater?
Opret en gratis konto og udsted dit første certifikat på under 10 minutter.