Installation

# apt install certbot python-ndg-httpsclient

Registrierung bei Certbot

Um Certbot nutzen zu können, muss man sich registrieren und ein Konto erstellen, über das dann die Zertifikate verwaltet werden.

# certbot register --agree-tos -m technik@jo-so.de

HTTPS-Zertifikat erstellen

Der Webserver muss bereits konfiguriert sein. Certbot legt im Hauptverzeichnis kurzzeitig einige Dateien an, die der CA die Kontrolle über den Server anzeigen.

# certbot certonly --webroot -w /srv/www/jo-so.de --domain jo-so.de,www.jo-so.de

Prüfsummen für HTTP-Public-Key-Pinning (HPKP) erstellen

Zertifikat bei Nginx einrichten

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

    server_name jo-so.de www.jo-so.de;

    # redirect permanently all requests to HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 http2 ssl;
    listen [2a03:4000:8:213::1]:443 http2 ssl;

    server_name www.jo-so.de;

    ssl_certificate /etc/letsencrypt/live/jo-so.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/jo-so.de/privkey.pem;

    add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload";

    # redirect permanent all requests to HTTPS
    return 301 https://jo-so.de$request_uri;
}

server {
    listen 443 http2 ssl;
    listen [2a03:4000:8:213::1]:443 http2 ssl;

    server_name jo-so.de www.jo-so.de;

    ssl_certificate /etc/letsencrypt/live/jo-so.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/jo-so.de/privkey.pem;

#    ssl_certificate /etc/letsencrypt/live/jo-so.de/fullchain.ecdsa.pem;
#    ssl_certificate_key /etc/letsencrypt/live/jo-so.de/privkey.ecdsa.pem;

    ssl_dhparam /etc/ssl/private/dhparams.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_protocols TLSv1.1 TLSv1.2;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 2h;

    ssl_stapling on;
    ssl_stapling_verify off;
    ssl_stapling_responder http://ocsp.int-x3.letsencrypt.org;

    access_log /var/log/nginx/jo-so_access.log;
    error_log /var/log/nginx/jo-so_error.log;

    root /srv/www/jo-so.de;

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

    add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload";
    add_header Public-Key-Pins "max-age=345600; pin-sha256=\"L/GBYFdJga1U+I3ZOmPMptG+y1Noe+/9z56JeXnBqG0=\"";

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

Mit nginx -t kann man bei Nginx prüfen, ob die Konfiguration korrekt ist.

Prüfen der Einstellungen mit SSL Labs

Bei SSL Labs kann man prüfen, ob die Einstellungen richtig und wie gut sie sind. Für eine bessere Bewertung sollte man bei Public-Key-Pins zwei Schlüssel angeben. Nur leider weiß ich noch nicht, wie man mit Certbot das lösen kann.

Weitere Certbot-Befehle

HTTP-Zertifikat mit ECDSA erstellen

Weitere Informationen