Im Beitrag Let’s Encrypt SSL Zertifikate unter Ubuntu Linux 16.04 Server mittels nginx und webroot Plugin beziehen habe ich beschrieben, wie es mithilfe des certbot Tools möglich ist SSL Zertifikate von Let’s Encrypt über nginx und das webroot Plugin zu beziehen. Dieser Mechanismus funktioniert aber nur für Webseiten. Für Dienste, welche keine Webseite über nginx bereitstellen ist dieses Verfahren nicht geeignet. Mit einer leichten Modifikation können aber auch SSL Zertifikate für Dienste ohne Webseiten wie postfix oder dovecot bezogen werden. In diesem Beitrag beschreibe ich die notwendigen Anpassungen dafür.
nginx
Da Dienste wie postfix oder dovecot standardmäßig keine Website über nginx bereitstellen lege ich eine dummy Webseitenkonfiguration für die Webseite unter welcher die Dienste erreichbar sind an, welche bei Bedarf aktiviert wird.
Dazu wird ein Verzeichnis benötigt, auf welches als Speicherort der Webseitendaten verwiesen werden kann.
$ sudo mkdir /var/www/empty
Nun muss für den Dienst (z.B. postfix) noch die Konfiguration angelegt werden. Ich verwende dazu nachfolgendes Template.
server { listen 80; listen [xxxx:xxxx:xxxx::42]:80; server_name mail.example.com; root /var/www/empty; # snippet for updating letsencrypt certificates include snippets/certbot-webroot.conf; }
certbot
Damit der certbot die SSL Zertifikate für den Dienst abrufen kann benötigt er eine Konfigurationsdatei. Außerdem muss sowohl der pre als auch post-hook etwas angepasst werden.
Konfigurationsdatei
Als Konfigurationsdatei zum Abfragen kann das Template aus dem Beitrag Let’s Encrypt SSL Zertifikate unter Ubuntu Linux 16.04 Server mittels nginx und webroot Plugin beziehen verwendet werden. Die Konfiguration kann dann z.B. als /etc/letsencrypt/com.example.mail-postfix.conf gespeichert werden.
pre-hook
Im pre-hook muss ergänzt werden, dass die nginx Webseitenkonfiguration unter welcher der Dienst erreichbar ist aktiviert wird.
#!/bin/bash # Add content to the nginx snippet echo 'location ^~ /.well-known/acme-challenge/ {' >> /etc/nginx/snippets/certbot-webroot.conf echo ' default_type "text/plain";' >> /etc/nginx/snippets/certbot-webroot.conf echo ' root /var/www/letsencrypt;' >> /etc/nginx/snippets/certbot-webroot.conf echo ' auth_basic off;' >> /etc/nginx/snippets/certbot-webroot.conf echo '}' >> /etc/nginx/snippets/certbot-webroot.conf # Enable site ln -s /etc/nginx/sites-available/com.exmaple.mail /etc/nginx/sites-enabled/ # Load new nginx config /bin/sh /etc/init.d/nginx reload
post-hook
Das post-hook Skript muss so angepasst werden, dass die Webseitenkonfiguration des Dienstes wieder deaktiviert wird und der Dienst seine Konfiguration neu lädt (Hier am Beispiel von postfix).
#!/bin/bash # Empty the nginx snippet truncate -s 0 /etc/nginx/snippets/certbot-webroot.conf # Disable site rm /etc/nginx/sites-enabled/com.example.mail # Reload configurations /bin/sh /etc/init.d/nginx reload /bin/sh /etc/init.d/postfix reload
Zertifikate beziehen
Zum Abfragen der Zertifikate kann der auch im Beitrag Let’s Encrypt SSL Zertifikate unter Ubuntu Linux 16.04 Server mittels nginx und webroot Plugin beziehen vorgestellte Befehl certbot certonly verwendet werden
$ sudo certbot certonly -c /etc/letsencrypt/com.example.mail-postfix.conf