Automatisieren von LetsEncrypt-Zertifikatsanforderungen auf einem Shared Hosting über SSH
Für dieses Blog nutze ich Zertifikate von LetsEncrypt, die ich mir mittels Certbot, generiere, und anschließend manuell einbinde (da mein Hoster die automatische Generierung von Letsencrypt-Zertifikaten nicht unterstützt).
Zumindest die Challenge (http-01) konnte ich allerdings automatisieren, sodass ich die Dateien nicht manuell hochladen muss. Ein ssh-Zugang ist erlaubt, diesen nutze ich auch. Das ganze sollte aber auch per ftp funktionieren.
Für die Automatisierung nutze ich die “Pre and Post Validation Hooks” mit folgendem Aufruf:
certbot certonly --manual --preferred-challenges=http \
--manual-auth-hook "./auth.sh auth" \
--manual-cleanup-hook "./auth.sh clean" \
--cert-name my-certificate
Wobei auth.sh
wie folgt aussieht:
#!/bin/bash
# Authenticator and cleanup for LetsEncrypt certificates
# https://certbot.eff.org/docs/using.html#pre-and-post-validation-hooks
WEBROOT=/htdocs/
ACMEDIR=.well-known/acme-challenge
if [[ -z $CERTBOT_VALIDATION ]]; then
echo "Validation string not present"
exit 1
fi
if [[ -z $CERTBOT_TOKEN ]]; then
echo "Token name not present"
exit 1
fi
if [[ -z $CERTBOT_DOMAIN ]]; then
echo "Domain name not present"
exit 1
fi
case $CERTBOT_DOMAIN in
example1.com | example2.com)
RELPATH=directory1
;;
example3.com)
RELPATH=directory2
;;
*)
echo "Domain name not supported"
exit 1
;;
esac
WEBDIR=$WEBROOT/$RELPATH/$ACMEDIR
echo "$CERTBOT_VALIDATION" > $CERTBOT_TOKEN
case $1 in
auth)
# authenticator mode
ssh user@example.com "mkdir -p $WEBDIR"
scp ./$CERTBOT_TOKEN user@example.com:$WEBDIR/
rm ./$CERTBOT_TOKEN
;;
clean)
ssh user@example.com "rm $WEBDIR/$CERTBOT_TOKEN; rmdir $WEBDIR"
rm ./$CERTBOT_TOKEN
;;
*)
echo "Mode not supported"
exit 1
;;
esac
Kommentare / Comments
Kommentare werden von mir selbst auf einem anderen Server über Isso gehostet.
Comments are hosted by myself on another server, powered by Isso.