letsencrypt – nginx mehere Domains – SAN-Zertifikat

Von | 29. Oktober 2016

Ich habe noch einmal mit letsencrypt gespielt und habe mir ein SAN-Zertifikat (für mehrere Domains) ausstellen lassen. SAN steht für „Subject Alternative Name“.
Wildcard-Domains werden von letsencrypt nicht ausgestellt. Das sollte in der Praxis aber auch kein Problem sein. Aktuell sind wohl mehr als 100 Domains pro Zertifikat möglich. Das sollte für den privaten Gebrauch völlig ausreichend sein.

vHost-Eintrag nginx

Die Herausforderung besteht nun darin, das Zertifikat mit nur einem Aufruf vom Certbot zu beantragen. Mehrere Domains bedeuten auch meist mehrere vHosts und root-Verzeichnisse. Um das ganze jedoch nicht unnötig kompliziert zu machen, habe ich noch einmal meine vHosts für alle Domains geändert. Dieser Eintrag gilt jetzt für alle vHosts! (Copy&Paste)


location /.well-known/acme-challenge {
    root /srv/www/letsencrypt/;
    allow all;
}

Alle Domains haben jetzt für die Location „/.well-known/acme-challenge“ das gleiche root-Verzeichnis. Das ist gar kein Problem, da die Challege für jede Domain anders aussieht. Certbot muss jetzt nur noch in ein Verzeichnis schreiben.

vereinfachter Aufruf von certbot

Mit unserem kleinen Trick wird der certbot Aufruf viel übersichtlicher. Wir brauchen nur noch einmal das root-Verzeichnis „/srv/www/letsencrypt/“ angeben und die Domains auflisten.
cerbot kann jetzt wie folgt aufgerufen werden:
<pre>
certbot certonly --webroot -w /srv/www/letsencrypt/ -d gettoweb.de -d www.gettoweb.de -d mail.gettoweb.de -d mail10.gettoweb.de -d piwik.gettoweb.de

Wie Du siehst habe ich dabei auch gleich das Zertifikat für die Sub-Domain mail.gettoweb.de ausstellen lassen. Somit kann ich das Zertifikat auch gleich für mein Postfix verwenden. Der Aufruf ist doch jetzt kinderleicht, oder?

Einbinden der Zertifikats in Nginx

Wenn alles funktioniert hat, liegen die Schlüssel (Keys) in /etc/letsencrypt/live/domain.de
Da müssen diese aus unbedingt liegen bleiben, sonnst klappt das erneuern später nicht!
Das Einbinden des Zertifikats ist jetzt auch ganz einfach und wieder für alle vHosts gleich. Also wieder Copy&Paste :)

ssl_certificate  /etc/letsencrypt/live/gettoweb.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gettoweb.de/privkey.pem;

SAN-Zertifikat von letsencrypt

SAN-Zertifikat von letsencrypt

Nach dem reload von nginx können wir uns das Zertifikat live ansehen. Es sollte dann in etwas so aussehen. Ich rate euch auf jeden Fall das fullchain.pem zu nutzen. Wenn nur die cert.pem verwendet wird, haben einige Webbrowser Probleme, das Zertifikat zu prüfen. Gerade die mobilen Webbrowser sind hier ein Problem.

in Postfix einbinden

Auch in Postfix ist das Zertifikat in wenigen Sekunden eingetragen:

# TLS parameters
smtpd_tls_cert_file = /etc/letsencrypt/live/gettoweb.de/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/gettoweb.de/privkey.pem
smtpd_use_tls = yes

Zertifikate aktualisieren

Da die Zertifikate alle 90 Tage erneuert werden müssen, solltet Ihr Euch dafür ein Cron-Job anlegen. Den lasst Ihr alle paar Tage laufen. Wenn die Zertifikate noch lange genug gültig sind (hier muss ich noch einmal nachlesen) werden diese auch nicht aktualisiert. Als Aufruf genügt ein einfaches:

certbot renew

Natürlich muss nach einer Aktualisierung der Zertifikate, der Postfix und Nginx neu gestartet werden!

service nginx restart
service postfix restart

[sc name=“adsense_txt“]