diff options
author | uvok cheetah | 2019-05-18 16:43:23 +0200 |
---|---|---|
committer | uvok cheetah | 2019-05-18 17:06:36 +0200 |
commit | c171fc63f60c6119a1f4fe75320828550792c1f5 (patch) | |
tree | 10887837d3e8e98be2044546f914c7f4e245a0d8 /_posts | |
parent | f6a89e8943a52b27df37353cf57fe926788f0436 (diff) |
Add pot regarding SSH/LetsEncrypt
Diffstat (limited to '_posts')
-rw-r--r-- | _posts/2019-05-18-auto-letsencrypt-shared.md | 90 |
1 files changed, 90 insertions, 0 deletions
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 +~~~~ + + |