sync-certs.sh 1.7 KB

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