Index denníkaDockup / poznámka z terénu
Note / custom-domain-ssl-stuck-validating

Vlastná doména uviaznutá na overovaní SSL

Vlastná doména, ktorá sa neustále overuje, zvyčajne zlyháva z jedného zo štyroch dôvodov: nesprávny typ záznamu, proxy pred challenge, propagácia, ktorú nevidíte, alebo CAA. Skontrolujte ich v tomto poradí.

Pridali ste záznam. dig ho zobrazuje. Platforma stále hlási stav pending a už to trvá hodinu. Vlastná doména uviaznutá na overovaní je frustrujúca práve preto, že všetky kontroly, ktoré môžete spustiť sami, vyzerajú úspešne.

Existujú štyri príčiny. Všetky sú mechanické a postup nižšie ich odhalí najrýchlejšie.

Najprv: čo overovanie skutočne robí

Skôr než certifikačná autorita vydá certifikát, musí overiť, že máte daný názov pod kontrolou. Existujú dva bežné spôsoby a to, ktorý z nich vaša platforma používa, ovplyvňuje, čo sa môže pokaziť:

  • HTTP-01 — CA odošle požiadavku na http://your-domain/.well-known/acme-challenge/<token> a očakáva konkrétny reťazec. To vyžaduje, aby požiadavky cez obyčajné HTTP na vašu doménu dorazili na platformu.
  • DNS-01 — CA hľadá TXT záznam. To vyžaduje, aby záznam existoval a bol viditeľný pre resolver CA, čo nemusí byť ten istý resolver, ktorý ste použili vy.

Takmer pri každom uviaznutom overovaní stojí medzi CA a jednou z týchto dvoch vecí nejaká prekážka.

Príčina č. 1: proxy pred challenge

Toto je najčastejšia príčina, keď doména využíva CDN, a je skutočne mätúca, pretože proxy je zvyčajne presne to, čo ste chceli.

Ak je váš DNS záznam proxied namiesto priameho smerovania na platformu, požiadavka CA typu HTTP-01 skončí na proxy. Proxy poskytne vlastný certifikát, uplatní vlastné pravidlá a môže vrátiť redirect, challenge stránku alebo 404 — nič z toho neobsahuje token, na ktorý CA čaká.

Riešením je umožniť challenge prejsť:

  • Dočasne vypnite proxy (nastavte záznam na grey-cloud), kým sa certifikát nevydá, a potom ju znova zapnite.
  • Alebo vylúčte /.well-known/acme-challenge/* zo všetkých redirectov alebo access rules.

Háčik je v tom, že ochrany typu „Always Use HTTPS“ a „Under Attack“ prerušia HTTP-01, hoci z pohľadu prehliadača stránka funguje úplne správne.

Príčina č. 2: nesprávny typ záznamu

Väčšinu zostávajúcich prípadov spôsobujú dve chyby:

A záznam smerujúci na adresu, ktorá sa mení. Ak vám platforma poskytla hostname, použite CNAME. Skopírovanie aktuálnej IP adresy do A záznamu funguje len dovtedy, kým sa adresa nezmení.

CNAME na vrchole zóny. example.com nemôže v štandardnom DNS obsahovať CNAME spolu so svojimi SOA a NS záznamami. Niektorí poskytovatelia ponúkajú riešenia ako ALIAS, ANAME alebo „CNAME flattening“; iní nie. Ak ich váš poskytovateľ nepodporuje, použite subdoménu — app.example.com — a presmerujte apex.

# What the world actually sees, not what your dashboard shows
dig +short app.example.com CNAME
dig +short app.example.com A

Ak sú oba výsledky prázdne, na ničom ďalšom v tomto zozname zatiaľ nezáleží.

Príčina č. 3: propagácia, ktorú nemeriate

dig bez argumentov sa pýta vášho resolvera, ktorý môže mať odpoveď, ktorú ste práve vytvorili, uloženú v cache — alebo ešte horšie, môže mať v cache NXDOMAIN z obdobia pred vytvorením záznamu. Negatívny záznam v cache s dlhým TTL je veľmi častým dôvodom, prečo overovanie hodinu zlyháva a potom bez akéhokoľvek zásahu začne fungovať.

Pýtajte sa priamo autoritatívnych serverov a tiež verejného resolvera, aby ste videli, čo pravdepodobne uvidí CA:

# Ask the zone's own nameservers
dig +short app.example.com @$(dig +short NS example.com | head -1)

# Ask a resolver outside your network
dig +short app.example.com @1.1.1.1
dig +short app.example.com @8.8.8.8

Ak je odpoveď autoritatívneho servera správna, ale verejné resolvery vracajú nesprávnu odpoveď, čakáte na TTL a nie je čo opravovať.

Príčina č. 4: CAA odmieta vydavateľa

Tento problém je zriedkavý, pri bežných DNS kontrolách neviditeľný a pri výskyte úplne tichý.

CAA záznam na vašej doméne určuje, ktoré certifikačné autority pre ňu môžu vydávať certifikáty. Ak nejaký máte — často zdedený zo staršej konfigurácie alebo pridaný na základe odporúčania bezpečnostného skenu — a neobsahuje CA, ktorú používa vaša platforma, vydanie zlyhá. Jediné miesto, kde sa to dozviete, sú logy CA, ku ktorým nemáte prístup.

dig +short example.com CAA
dig +short app.example.com CAA

Prázdny výstup znamená, že neexistuje žiadne obmedzenie, čo je v poriadku. Ak sa záznamy zobrazia, buď pridajte CA, ktorú používa vaša platforma, alebo toto obmedzenie odstráňte.

Poradie, v ktorom problém nájdete najrýchlejšie

  1. Spustite dig proti verejnému resolveru. Žiadna odpoveď znamená, že záznam je nesprávny alebo ešte nebol propagovaný — tu skončite.
  2. Skontrolujte, či je záznam proxied. Ak áno, vypnite proxy alebo vylúčte ACME path.
  3. Skontrolujte CAA na apex aj subdoméne.
  4. Až potom zvážte, že problém je na strane platformy.

Deväťdesiat percent uviaznutých overovaní sa skončí v kroku 1 alebo 2.

Ako to funguje v Dockup

Dve rozhodnutia v návrhu odstraňujú väčšinu neistoty.

DNS záznam sa vytvorí automaticky. Ak máte zónu v Cloudflare a pripojili ste účet, pridanie domény vytvorí samotný záznam, takže nemusíte hodnotu manuálne kopírovať:

dockup domain add app.example.com my-project/my-api --port 3000 --cloudflare

Tým sa odstráni celá skupina chýb spôsobených preklepmi a nesprávnym typom záznamu — platforma vie, či potrebuje CNAME alebo A záznam, a vytvorí správny.

Udelenie prístupu pozostáva z dvoch oprávnení. Zone:Read a DNS:Edit, nič viac. Dockup nemôže čítať vaše ostatné zóny, meniť nastavenia účtu ani zasahovať do ničoho, na čo nedostal oprávnenie. Automatizácia DNS by nemala vyžadovať odovzdanie celého účtu.

Stav overenia a certifikátu je viditeľný pre každú doménu samostatne, nie ako jeden súhrnný stav. Preto „DNS overené, ale TLS čaká“ presne vystihuje situáciu — ide o dva samostatné kroky, z ktorých jeden už bol dokončený.

Často kladené otázky

Ako dlho by malo trvať vydanie certifikátu? Po správnom vyriešení DNS zvyčajne menej než minútu. Ak stav pending trvá viac než približne pätnásť minút, niečo vydaniu bráni — nejde len o pomalosť.

Prečo moja doména funguje v prehliadači, ale overenie zlyháva? Pretože prehliadač nasleduje redirecty a používa HTTPS, zatiaľ čo challenge nerobí ani jedno. Proxy, ktorá bez problémov poskytuje vašu stránku, môže stále pohltiť ACME požiadavku cez obyčajné HTTP.

Môžem na koreňovej doméne použiť CNAME? Nie v štandardnom DNS. Použite funkciu poskytovateľa, napríklad ALIAS alebo CNAME flattening, prípadne nasmerujte apex na subdoménu pomocou redirectu.

Čo je CAA záznam a potrebujem ho? Obmedzuje, ktoré certifikačné autority môžu vydávať certifikáty pre vašu doménu. Potrebovať ho nemusíte, ale ak máte CAA záznam, ktorý neuvádza CA vašej platformy, vydanie certifikátu zlyhá bez viditeľnej chyby.