let’s encrypt dns challenge (manuel)

In diesem Beitrag stelle ich eine Vorgehensweise vor, um auf einem apache2 oder nginx server ein let’s encrypt zertifikat zu installieren. Dabei werde ich als Challenge DNS verwenden.

Anforderungen

mindestens Ubuntu >= 18.04.5 LTS oder gleichwertig
certbot über apt/snap installieren (https://certbot.eff.org/instructions)
dig kann über apt installiert werden ‚apt install dnsutils

certbot certonly --manual --preferred-challenges dns --debug-challenges -d *.your-domain -d your-domain

Wenn certbot richtig installiert wurde sollte der Befehl ungefähr diese Ausgabe erzeugen.

Die folgende Frage mit ‚y‘ bestätigen.

Danach bekommt man einen DNS TXT record angezeigt.
Wichtig hier erst auf Enter drücken, wenn man den Eintrag über tools wie dig findet.

Als nächsten Schritt muss der TXT Record in einem DNS Service eurer Wahl hinterlegt werden.
Der TXT Record Name enspricht dem Format ‚_acne-challenge.your-domain‘.
Der Value ist ein langer Hashwert.

Danach inbedingt mit ‚dig‘ prüfen ob der DNS Record live ist oder noch gewartet werden muss.
Die rot markierte Zahl ist die TTL Zeit in Sekunden für die einen Record als DNS Eintrag bestehen bleibt.
Wenn der Eintrag noch einen alten Wert enthält muss man diese Zeit abwarten.

Wenn der neue DNS Record mit dem richtigen Name/Value Paar gefunden wird kann der nächste Schritt in certbot gemacht werden.

Sollte man zu früh den nächsten Schritt in certbot machen bekommt man eine Fehlerausgabe wie diese hier.

Danach muss man für den Webserver einen VHost anlegen der das Zertifikat verwendet.
bei apache werden diese für gewöhnlich /etc/apache2/sites-enabled/default.confangelegt und haben folgenden Inhalt.

<IfModule mod_ssl.c>
<VirtualHost *:443>

ServerName www.your-domain
ServerAlias your-domain
DocumentRoot /var/www/your-domain

<Directory /var/www/your-domain>
 Options +FollowSymlinks
 AllowOverride All
</Directory>
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined


Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/your-domain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your-domain/privkey.pem
</VirtualHost>
</IfModule>

Bei Nginx sollte die config in /etc/nginx/sites-enabled/default stehen und folgenden Inhalt haben.

server {
       listen 80 default_server;
       listen [::]:80 default_server;

       # SSL configuration
       #
       listen 443 ssl;
       listen [::]:443 ssl;  
       #
       # Note: You should disable gzip for SSL traffic.
       # See: https://bugs.debian.org/773332
       #
       # Read up on ssl_ciphers to ensure a secure configuration.
       # See: https://bugs.debian.org/765782
       #
       # Self signed certs generated by the ssl-cert package
       # Don't use them in a production server!
       #
       # include snippets/snakeoil.conf;
       ssl_certificate /etc/letsencrypt/live/your-domain/cert.pem;
       ssl_certificate_key /etc/letsencrypt/live/your-domain/privkey.pem;

       root /var/www/html;

       # Add index.php to the list if you are using PHP
       index index.html index.htm index.nginx-debian.html;

       server_name your-domain;

       location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
               try_files $uri $uri/ index.html =404;
       }

       # pass PHP scripts to FastCGI server
       #
       #location ~ \.php$ {
       #       include snippets/fastcgi-php.conf;
       #
       #       # With php-fpm (or other unix sockets):
       #       fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
       #       # With php-cgi (or other tcp sockets):
       #       fastcgi_pass 127.0.0.1:9000;
       #}

       # deny access to .htaccess files, if Apache's document root
       # concurs with nginx's one
       #
       #location ~ /\.ht {
       #       deny all;
       #}
}