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:
bundle.pem(im falle gethttpsforfree muss man die vorher zusammenbauen, erst signed cert, dann intermediate cert in datei konkatenieren)- Letsencrypt Root CA - https://letsencrypt.org/certs/isrgrootx1.pem.txt
- 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