diff options
-rw-r--r-- | _drafts/test.md | 7 | ||||
-rw-r--r-- | _posts/2019-05-18-auto-letsencrypt-shared.md | 90 |
2 files changed, 90 insertions, 7 deletions
diff --git a/_drafts/test.md b/_drafts/test.md deleted file mode 100644 index 24a3a93..0000000 --- a/_drafts/test.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Trying out unlisted posts -layout: post -unlisted: true ---- - -This is me trying out "private" posts... diff --git a/_posts/2019-05-18-auto-letsencrypt-shared.md b/_posts/2019-05-18-auto-letsencrypt-shared.md new file mode 100644 index 0000000..e07bda1 --- /dev/null +++ b/_posts/2019-05-18-auto-letsencrypt-shared.md @@ -0,0 +1,90 @@ +--- +title: Automatisieren von LetsEncrypt-Zertifikatsanforderungen auf einem Shared Hosting über SSH +layout: post +date: 2019-05-18 16:45 +0200 +--- + +Für dieses Blog nutze ich Zertifikate von +[LetsEncrypt](https://letsencrypt.org/){:target="blank"}{:rel="noreferrer"}, +die ich mir mittels +[Certbot](https://certbot.eff.org/){:target="blank"}{:rel="noreferrer"}, +generiere, und anschließend manuell einbinde (da mein Hoster die automatische +Generierung von Letsencrypt-Zertifikaten nicht unterstützt). + +Zumindest die Challenge +[(http-01)](https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-7.2){:target="blank"}{:rel="noreferrer"} +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"](https://certbot.eff.org/docs/using.html#pre-and-post-validation-hooks){:target="blank"}{:rel="noreferrer"} +mit folgendem Aufruf: + +~~~ bash +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: + +~~~~ bash +#!/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 +~~~~ + + |