====== Let's Encrypt (Certbot) ====== * [[https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx]] * [[https://certbot.eff.org/docs/install.html]] ===== Installation ===== ==== Ubuntu ==== mit snapd installieren ==== FreeBSD ==== Paketnamen: security/py-certbot security/py-certbot-dns-cloudflare Installing py37-certbot-1.14.0,1... This port installs the "standalone" client only, which does not use and is not the certbot-auto bootstrap/wrapper script. The simplest form of usage to obtain certificates is: # sudo certbot certonly --standalone -d , [domain2, ... domainN]> NOTE: The client requires the ability to bind on TCP port 80 or 443 (depending on the --preferred-challenges option used). If a server is running on that port, it will need to be temporarily stopped so that the standalone server can listen on that port to complete the challenge authentication process. For more information on the 'standalone' mode, see: https://certbot.eff.org/docs/using.html#standalone The certbot plugins to support apache and nginx certificate installation will be made available in the following ports: * Apache plugin: security/py-certbot-apache * Nginx plugin: security/py-certbot-nginx In order to automatically renew the certificates, add this line to /etc/periodic.conf: weekly_certbot_enable="YES" More config details in the certbot periodic script: /usr/local/etc/periodic/weekly/500.certbot-3.7 ===== Konfiguration ===== * https://certbot.eff.org/docs/using.html Cloudflare API Token einsetzen: # Cloudflare API token used by Certbot dns_cloudflare_api_token = API-TOKEN ===== Certbot mit Cloudflare-Plugin ===== ==== Zertifikat erstellen ==== === Optionen === * Mit ''%%--cert-name%%'' kann man einen anderen Namen vergeben und somit ECDSA und RSA parallel betreiben * Möglichkeiten für ''%%--key-type%%'': ''ecdsa'' oder ''rsa'' * Möglichkeiten für ''%%--elliptic-curve%%'': ''secp384r1'' oder ''secp256r1'' (''secp521r1'' wird so gut wie gar nicht unterstützt) === Script === #!/usr/bin/env bash if test -z "${DOMAIN}" || test -z "${EMAIL}" then printf '\nPlease specify domain and email like this before running the script:\nDOMAIN="example.com" EMAIL="letsencrypt@example.com" certbot-create.sh\n\n' exit fi EC_NAME="${EC_NAME:-secp384r1}" RSA_SIZE="${RSA_SIZE:-4096}" certbot_create () { certbot certonly -d "${DOMAIN}" -d "*.${DOMAIN}" -n -m "${EMAIL}" --agree-tos --no-eff-email --expand --key-type "${KEY_TYPE}" --elliptic-curve "${EC_NAME}" --rsa-key-size "${RSA_SIZE}" --cert-name "${KEY_TYPE}-${DOMAIN}" --preferred-challenges dns --dns-cloudflare --dns-cloudflare-propagation-seconds 30 --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini } KEY_TYPE="ecdsa" certbot_create KEY_TYPE="rsa" certbot_create === Manuell === > DOMAIN="example.com" > EMAIL="letsencrypt@example.com" > EC_NAME="secp384r1" > RSA_SIZE="4096" # choose one # ECDSA > KEY_TYPE="ecdsa" # RSA > KEY_TYPE="rsa" > certbot certonly -d "${DOMAIN}" -d "*.${DOMAIN}" -n -m "${EMAIL}" --agree-tos --no-eff-email --expand --key-type "${KEY_TYPE}" --elliptic-curve "${EC_NAME}" --rsa-key-size "${RSA_SIZE}" --cert-name "${KEY_TYPE}-${DOMAIN}" --preferred-challenges dns --dns-cloudflare --dns-cloudflare-propagation-seconds 30 --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini ==== Zertifikat erneuern ==== > certbot renew > certbot renew --post-hook /usr/local/sbin/certbot-post-hook.sh mit ''%%--dry-run%%'' und ''%%--test-cert%%'' kann man testen (siehe man page) \\ mit ''%%--force-renewal%%'' kann man eine Erneuerung erzwingen ==== aktuelle Zertifikate auflisten und Details anzeigen ==== > certbot certificates Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Found the following certs: Certificate Name: domain.de Serial Number: 3e9470e7f5c730e3e2da4640e61a01f23f6 Key Type: RSA Domains: domain.de *.domain.de Expiry Date: 2021-10-16 22:06:27+00:00 (INVALID: EXPIRED) Certificate Path: /usr/local/etc/letsencrypt/live/domain.de/fullchain.pem Private Key Path: /usr/local/etc/letsencrypt/live/domain.de/privkey.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ==== crontab ==== zertifikate wöchentlich erneuern (falls kurz vorm ablaufen): @weekly root certbot renew > /var/log/certbot.log 2>&1 === mit hook === z.b. bei tatsächlicher erneuerung chain.pem bündeln (für nginx directive ''ssl_trusted_certificate'') und nginx neustarten @weekly root certbot renew --post-hook /usr/local/sbin/certbot-post-hook.sh #!/usr/bin/env bash cat /etc/letsencrypt/live/*/chain.pem > /etc/letsencrypt/live/chain.pem systemctl restart nginx 2> /dev/null