Letsencrypt

dehydrated - step by step

Inzwischen alles in Ansible, nicht mehr so machen!

git clone git@github.com:lukas2511/dehydrated.git

mkdir /etc/dehydrated /etc/nginx/ssl /var/www/letsencrypt

cp dehydrated/docs/examples/config /etc/dehydrated/

vi /etc/dehydrated/domains.txt /etc/dehydrated/config

Beides ausfüllen. Config wichtig: WELLKNOWN="/var/www/letsencrypt"

dehydrated/dehydrated --register --accept-terms dehydrated/dehydrated --cron

Nginx

  • in Serverblock für Port 80 einfügen:
# Redirect LetsEncrypt to dehydrated
location ^~ /.well-known/acme-challenge {
    auth_basic "off";
    alias /var/www/dehydrated;
}
  • Serverblock für Port 80 kopieren zu 443
  • Dazu: (Domain anpassen)
    ssl_certificate /etc/nginx/ssl/example.com/cert.pem
    ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem

nginx configtest und neustarten, checken ob https funktioniert

redirect einbauen: alles aus Serverblock Port 80 raus, stattdessen rein:

server {
  listen 80;
  server_name _;
  return 301 https://$host$request_uri;
  }

nochmal configtest, neustart, redirect testen

Apache

In passenden Virtualhost, nach Servername etc:

    DocumentRoot /var/www/letsencrypt/
    Alias /.well-known/acme-challenge/ /var/www/letsencrypt/
        <Directory /var/www/letsencrypt>
                Options None
                AllowOverride None

                <IfModule mod_authz_core.c>
                        Require all granted
                </IfModule>
        </Directory>

    Redirect / https://richtige-domain.com

crontab -e, eintragen:

0 11 * * 3 /opt/dehydrated/dehydrated --cron >>/opt/dehydrated/dehydrated-cron.log 2>&1 && /bin/systemctl restart nginx >>/opt/dehydrated/dehydrated-cron.log 2>&1

Immer machen bei Geproxye (zB in Rails-Apps), wenn nur HTTPS gehen soll und auch alles im Hintergrund darüber nachgeladen wird: proxy_set_header X-Forwarded-Proto $scheme;

WICHTIG!

Endpoints

v2 api endpoint: https://acme-v02.api.letsencrypt.org/directory

v2 api endpoint staging: https://acme-staging-v02.api.letsencrypt.org/directory

Sonderfall Zimbra

Zimbra Bullshit: der eingebaute Jetty kann nicht einfach .well-known servieren. Daher wird use dafür genommen, in der Firewall werden entsprechende Requests dorthin umgebogen - muss erst aktiviert werden! (und danach wieder deaktiviert)

CSR wird übers Webinterface generiert (geht auch irgendwie über CLI, aber noch nicht ausprobiert). Damit Cert erstellen in gethttpsforfree.

Zertifikate im Admininterface wieder reinladen:

  1. bundle.pem (im falle gethttpsforfree muss man die vorher zusammenbauen, erst signed cert, dann intermediate cert in datei konkatenieren)
  2. Letsencrypt Root CA - https://letsencrypt.org/certs/isrgrootx1.pem.txt
  3. Letsencrypt Intermediate CA - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt

DNS-01 Challenge mit BIND

richtige Syntax - so muss das in das Zonefile: _acme-challenge.docs 900 IN TXT "xvMaMDbiOum2z9WK7snlMrfNDUoW-5IK2wkysEtztQc"

Key fehlt (acme-nosudo Bug)

Zu testen: domain.key auf den Server kopieren; ggf auch einfach neu erstellen

Certificate Transparency Logs

https://crt.sh/?Identity=%25&iCAID=16418