| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #!/bin/bash
- # Sünkroonib Caddy (edge_caddy) Let's Encrypt serdi mqtt.odamus.com jaoks
- # mosquitto jaoks loetavaks. Käivitub cronist (iga päev). Kui sert muutus,
- # taaskäivitab mosquitto, et uus sert laaditaks.
- #
- # NB: LE ahel lõpeb ISRG Root X2-ga, mis on rist-signeeritud ISRG Root X1-ga
- # (self-signed X1 ei ole ahelas). Seetõttu lisame CA-hunnikusse ka ISRG Root X1.
- set -euo pipefail
- SRC=/var/lib/docker/volumes/edge_caddy_data/_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mqtt.odamus.com
- BASE=/opt/mqtt
- mkdir -p "$BASE/certs"
- NEW_HASH=$(sha256sum "$SRC/mqtt.odamus.com.crt" | cut -d' ' -f1)
- OLD_HASH=$(cat "$BASE/certs/.cert.hash" 2>/dev/null || echo none)
- cp "$SRC/mqtt.odamus.com.crt" "$BASE/certs/server.crt"
- cp "$SRC/mqtt.odamus.com.key" "$BASE/certs/server.key"
- # ISRG Root X1 (self-signed, kehtiv kuni 2035) — vajalik ahela lõpetamiseks.
- if [ ! -s "$BASE/certs/isrgrootx1.pem" ]; then
- curl -fsS https://letsencrypt.org/certs/isrgrootx1.pem -o "$BASE/certs/isrgrootx1.pem" || true
- fi
- python3 - <<'PY'
- import re
- data = open("/opt/mqtt/certs/server.crt").read()
- certs = re.findall(r"-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----", data, re.S)
- chain = "\n".join(certs[1:]) + "\n"
- try:
- root = open("/opt/mqtt/certs/isrgrootx1.pem").read()
- except FileNotFoundError:
- root = ""
- open("/opt/mqtt/certs/esp32-ca.pem", "w").write(chain + root)
- print(f"ahelas {len(certs)} serti + ISRG Root X1")
- PY
- echo "$NEW_HASH" > "$BASE/certs/.cert.hash"
- chown -R 1883:1883 "$BASE/certs"
- chmod 644 "$BASE/certs/server.crt" "$BASE/certs/esp32-ca.pem"
- chmod 600 "$BASE/certs/server.key"
- if [ "$NEW_HASH" != "$OLD_HASH" ]; then
- docker restart mqtt-mosquitto >/dev/null 2>&1 || true
- fi
- echo "sert sünkroonitud; hash=$NEW_HASH"
|