Wofür brauche ich einen eigenen WKD Server?

Ich benutze Stalwart als Mailserver und Stalwart ist kein klassischer Mailserver wie Mailcow mit nginx, dovecot, postfix usw. im unterbau, sondern wurde komplett neu in Rust geschrieben.

Da ich nicht weiß wo genau das .well-known verzeichnis von Stalwart liegt nutze ich anstatt der Direct Methode die Advanced Methode. Das funktioniert so das ich einen eigenen Nginx Server habe wo ich die Policy Datei und die PGP Schlüsssel als “hu” hinterlegt habe und das ganze auf der Domain “openpgpkey.rochoellocho.org” veröffentliche.

Schritt 1: DNS Einträge

Als erstes habe ich einen A Rekord gemacht auf die Subdomain “openpgpkey” und der dazugehörigen IP. In meinem Fall ist die IP von meinem Reverse Proxy der sich dann muss um die Zertifikate kümmert.

Schritt 2: Nginx Server aufsetzen

Ich habe auf einer Ubuntu 24.04 Machine nginx Installiert

sudo apt install nginx

Dann habe ich eine neue nginx Config Erstellt:

sudo nano  /etc/nginx/sites-available/openpgpkey.rochoellocho.org.conf

mit folgendem Inhalt:

server {
    listen 80;
    listen [::]:80; # Lauscht auf IPv4 und IPv6 für Port 80

    server_name openpgpkey.rochoellocho.org; 

    root /var/www/openpgpkey.rochoellocho.org/html;

    location /.well-known/openpgpkey/ {
        default_type "application/octet-stream";
        add_header Access-Control-Allow-Origin "*";
        types {
            text/plain policy;
        }
        allow all;
    }

    # Standard-Fehlerseiten
    error_page 404 /404.html;
    location = /404.html {
        internal;
    }

}

Ich habe hier nur http genommen da sich mein Reverse proxy um https kümmert.

Dann habe ich folgendes Verzeichnis erstellt:

/var/www/openpgpkey.rochoellocho.org/html/.well-known/openpgpkey/rochoellocho.org/hu/

Dann habe ich ein symlink erstellt:

sudo ln -s /etc/nginx/sites-available/openpgpkey.rochoellocho.org.conf /etc/nginx/sites-enabled/

Zudem habe ich noch geprüft ob die Nginx config korrekt ist:

sudo nginx -t

und habe Nginx neu gestartet:

sudo systemctl reload nginx

Dann habe ich noch die Policy Datei erstellt:

touch /var/www/openpgpkey.rochoellocho.org/html/.well-known/openpgpkey/rochoellocho.org/policy

Schritt 3: PGP Schlüssel erstellen

Als erstes habe ich GnuPG installiert.

sudo apt update && sudo apt install gnupg gnupg-agent
gpg --full-generate-key

PGP Schlüssel Hier habe ich die 9 ausgewählt werden


Hier habe ich die 1 ausgewählt werden


Hier muss ausgewählt werden wie lange der Key gültig ist. Ich habe hier 1y genommen für 1 Jahr.


Hier muss der name hinterlegt werden sowie die E-Mail Addresse.


Dann wird man aufgefordert eine Passphrase zu hinterlegen. Beachte das diese jedes mal abgefragt wird wenn du eine E-Mail entschlüsseln willst.


Diesen Schlüssel muss man jetzt exportieren um mit ihm später E-Mails zu verschlüsseln oder zu entschlüsseln. Diesen muss man Später z.B. in Thunderbird hinterlegen. Dazu braucht man die Schlüssel ID

gpg --list-secret-keys --keyid-format=long

Die Schlüssel ID ist der Teil hinter dem ed25519/ Mit der Schlüssel ID kann man nun den Privaten Key exportieren.

gpg --armor --export-secret-keys DEINE_SCHLUESSEL_ID_ODER_EMAIL > ~/mein_privater_schluessel_backup.asc

Der Schlüssel wird jetzt in einer Datei mit der Endung .asc hinterlegt.


Nun muss noch die Hashed User ID berechnet werden.

gpg --with-wkd-hash --fingerprint rocho@rochoellocho.org

Den Hash findet man in der Zeile uid vor @rochoellocho.org: Mit diesem hash erzeugte ich eine WKD-Datei:

gpg --no-armor --export rocho@rochoellocho.org > <Hash-wert>

Diese Datei muss nun in dem Ordner /var/www/openpgpkey.rochoellocho.org/html/.well-known/openpgpkey/rochoellocho.org/huhinterlegt werden.

Schritt 4: Check

Nun kann man per WKD Chekcker checken ob alles richtig Konfiguriert ist. Hier sollte alles auf Grün sein.