Domain-Check für DNS, Webserver und Zertifikat #7
Notifications
Total Time Spent: 12 minutes
florian.wilde
12 minutes
No due date set.
Dependencies
No dependencies set.
Reference: florian.wilde/qrcode-generator#7
Reference in New Issue
Block a user
Angelegt aus QR Code Generator in Nebula.
✅ Umsetzung abgeschlossen — bereit zum Testen.
Das Issue hatte keinen Beschreibungstext; im Chat habe ich vorab abgestimmt, dass die Prüfung Ende zu Ende gehen soll — also nicht bloß DNS, Webserver und Zertifikat einzeln melden, sondern feststellen, ob die Domain tatsächlich bei dieser Installation ankommt.
Was geändert wurde
Auf Verwaltung → Domains steht bei jedem Eintrag ein Knopf Prüfen. Darunter erscheint ein Bericht mit vier Zeilen:
löst auf 203.0.113.10gültig bis 27.10.2026, ausgestellt von SSL CorporationHTTP 200 nach 84 msdiese InstallationDer letzte Schritt ist der eigentliche Wert. Die Anwendung ruft unter der Domain eine eigene Route auf und lässt sich einen HMAC über eine frische Zufallszahl zurückgeben. Das Geheimnis dafür entsteht beim ersten Check und verlässt den Server nie — so unterscheidet sich „zeigt irgendwohin“ von „zeigt hierher“.
Sprechende Fehlermeldungen statt Codes: abgelaufen, selbst ausgestellt, falscher Name, Zwischenzertifikat fehlt, Port 443 nimmt nichts an, „es antwortet etwas, aber nicht diese Anwendung“.
Läuft ein Zertifikat in ≤ 14 Tagen ab, gilt der Schritt als Warnung statt als Erfolg.
Scheitert schon DNS, fallen die drei Folgeschritte aus — dreimal dieselbe Meldung hätte die eine wichtige verdeckt.
Grenze der Aussage — steht so auch unter jedem Bericht: Der Aufruf startet dort, wo der Container läuft. Bei internem DNS oder Hairpin-NAT kann er scheitern, obwohl von außen alles stimmt; umgekehrt beweist ein Erfolg von innen nicht, dass die Domain von außen erreichbar ist.
Migration:
20260821010000_domain_check— eine SpaltecheckSecret(leer, füllt sich beim ersten Check).Geänderte Dateien
src/lib/domain-check.ts(neu)src/app/api/domain-check/route.ts(neu)src/app/api/admin/domains/[id]/check/route.ts(neu)src/components/domain-bericht.tsx(neu)src/components/domain-admin.tsxprisma/schema.prisma+ MigrationREADME.md,docs/sicherheit.mdSo testest du es
git switch feat/7-domain-checkdocker compose up -d --build app(die Migration läuft beim Start mit)gibt-es-nicht.invalid) → DNS meldet den fehlenden A-Eintrag, der Rest fällt aus.example.comregistrieren → DNS und Zertifikat in Ordnung, aber „Es antwortet zwar etwas, aber nicht diese Anwendung“.Geprüft mit einer eigenen Testreihe: 38 von 38 — Beweis-Route samt Fehlformen, alle drei Fälle oben, Oberfläche, Handy-Breite, keine Konsolenfehler.
Aufgewendete Zeit: 00:12
Pull Request: #15
Nach Freigabe:
/issue-freigabe 7Am Rande aufgefallen (kein eigenes Issue angelegt):
curl-Befehl. Sobald beide Zweige inmainsind, gehört dort stattdessen ein Verweis auf diesen Knopf. Kleiner Handgriff, den ich gern nachziehe.src/app/api/codes/route.tsmischt in einer Fehlermeldung ein typografisches „ mit einem geraden " — rein kosmetisch.🚀 Freigegeben und nach
mainübernommen.43a0504Konflikt mit #4, aufgelöst. Beide Zweige haben
src/components/domain-admin.tsxangefasst — #4 den Kurzhilfe-Knopf, #7 den Prüfen-Knopf. Betroffen war am Ende nur der Importblock; beide Seiten wurden übernommen, keine Zeile der jeweils anderen geändert. Zusammengeführt pergit merge mainin den Zweig, nicht per Rebase — ein geteilter Zweig soll keinen Force-Push sehen.Danach zur Sicherheit beide Testreihen nebeneinander laufen lassen: Kurzhilfe 24 von 24, Domain-Check 38 von 38. Typprüfung und Linter auf
main: grün.Issue wird geschlossen.