# wkd — OpenPGP Web Key Directory (publieke PGP-sleutels, advanced method) Mailclients (GnuPG, Thunderbird, Mailvelope, Proton-lookup, …) vinden hiermee automatisch de **publieke** PGP-sleutel bij een mailadres. Route-B image-app op de **derden-box**; per domein een subdomein `openpgpkey.` → `https://openpgpkey./.well-known/openpgpkey//hu/?l=`. ``` push naar main → Forgejo Actions (act_runner docgen): stage 1 bouwt met gpg-wks-client de hu/-boom uit keys//.asc, stage 2 = nginx die 'm serveert → push naar git.doc-gen.eu/wsfcqyxbu1/wkd:latest → host-watcher (docgen, |remote-entry) ziet de nieuwe digest → Coolify deployt op de derden-box ``` - **Alles staat in git** (publieke sleutels zijn geen geheim); geen volumes, geen env, geen back-up nodig. - **Alleen publieke sleutels.** De build faalt op een `PRIVATE KEY BLOCK`, op een bestandsnaam die niet bij de domeinmap hoort, en op een sleutel zonder UID met exact dat adres. - **Hash-regel** (spec, draft-koch-openpgp-webkey-service): `hu/`; wij rekenen 'm nooit zelf uit — `gpg-wks-client --install-key` doet dat, en exporteert alléén de UID van dat adres (andere UIDs moeten eruit). Controle: `gpg-wks-client --print-wkd-hash `. - **Sleutel toevoegen/vernieuwen:** `keys//.asc` (= `gpg --export --armor `) → commit + push. Nieuw domein = nieuwe map `keys//` + DNS `openpgpkey.` + domein op de Coolify-app. - **Headers:** `Content-Type: application/octet-stream`, `Access-Control-Allow-Origin: *`; `policy` is leeg (verplicht bestand). Toegangslog staat uit (geen sporen van wie welk adres opvraagt). - **Versie:** `FROM alpine:` (build) + `FROM nginx:-alpine` (runtime) in de `Dockerfile`. Beheer/runbook: infra-repo `wSFcQyxBu1/infra`, `runbooks/wkd-pgp-sleutels.md`; issue infra#88.