Ευρετήριο ημερολογίουDockup / σημείωση πεδίου
Note / custom-domain-ssl-stuck-validating

Το custom domain έχει κολλήσει στην επικύρωση SSL

Ένα custom domain που έχει κολλήσει στην επικύρωση συνήθως αποτυγχάνει σε ένα από τέσσερα σημεία: τον τύπο εγγραφής, έναν proxy μπροστά από το challenge, propagation που δεν μπορείτε να δείτε ή το CAA. Ελέγξτε τα με αυτή τη σειρά.

Προσθέσατε την εγγραφή. Το dig τη δείχνει. Η πλατφόρμα εξακολουθεί να εμφανίζει ότι η διαδικασία εκκρεμεί — και το κάνει εδώ και μία ώρα. Ένα custom domain κολλημένο στην επικύρωση είναι εξοργιστικό ακριβώς επειδή κάθε έλεγχος που μπορείτε να εκτελέσετε μόνοι σας φαίνεται να περνά με επιτυχία.

Υπάρχουν τέσσερις αιτίες, όλες μηχανικές, και η σειρά παρακάτω θα σας βοηθήσει να τις εντοπίσετε πιο γρήγορα.

Πρώτα: τι κάνει πραγματικά η επικύρωση

Πριν μια αρχή πιστοποίησης εκδώσει ένα certificate, πρέπει να επιβεβαιώσει ότι ελέγχετε το συγκεκριμένο όνομα. Υπάρχουν δύο συνηθισμένοι τρόποι και το ποιον χρησιμοποιεί η πλατφόρμα σας αλλάζει το τι μπορεί να προκαλέσει το πρόβλημα:

  • HTTP-01 — η CA ζητά το http://your-domain/.well-known/acme-challenge/<token> και περιμένει μια συγκεκριμένη συμβολοσειρά. Αυτό απαιτεί τα απλά HTTP requests προς το domain σας να φτάνουν στην πλατφόρμα.
  • DNS-01 — η CA αναζητά ένα TXT record. Αυτό απαιτεί η εγγραφή να υπάρχει και να είναι ορατή στον resolver της CA, ο οποίος δεν είναι απαραίτητα ο ίδιος με αυτόν που χρησιμοποιήσατε.

Σχεδόν κάθε επικύρωση που έχει κολλήσει οφείλεται σε κάτι που βρίσκεται ανάμεσα στη CA και σε ένα από αυτά τα δύο στοιχεία.

Αιτία 1: ένας proxy μπροστά από το challenge

Αυτή είναι η συνηθέστερη αιτία όταν το domain βρίσκεται πίσω από ένα CDN και προκαλεί πραγματικά σύγχυση, επειδή ο proxy είναι συνήθως ακριβώς αυτό που θέλατε να χρησιμοποιείτε.

Αν το DNS record σας είναι proxied αντί να δείχνει απευθείας στην πλατφόρμα, το HTTP-01 request της CA τερματίζει στον proxy. Ο proxy σερβίρει το δικό του certificate, εφαρμόζει τους δικούς του κανόνες και μπορεί να επιστρέψει redirect, σελίδα challenge ή 404 — τίποτα από τα οποία δεν περιέχει το token που περιμένει η CA.

Η λύση είναι να επιτρέψετε στο challenge να περάσει:

  • Απενεργοποιήστε τον proxy (βάλτε το record σε grey-cloud) μέχρι να εκδοθεί το certificate και, στη συνέχεια, ενεργοποιήστε τον ξανά.
  • Εναλλακτικά, εξαιρέστε το /.well-known/acme-challenge/* από οποιονδήποτε κανόνα redirect ή access.

Η παγίδα εδώ είναι ότι οι προστασίες τύπου «Always Use HTTPS» και «Under Attack» διακόπτουν το HTTP-01, ενώ από τον browser σας φαίνεται ότι ο ιστότοπος λειτουργεί κανονικά.

Αιτία 2: ο λάθος τύπος record

Δύο λάθη ευθύνονται για το μεγαλύτερο μέρος των υπόλοιπων περιπτώσεων:

Ένα A record που δείχνει σε διεύθυνση η οποία αλλάζει. Αν η πλατφόρμα σάς έδωσε hostname, χρησιμοποιήστε CNAME. Η αντιγραφή της τρέχουσας IP σε A record λειτουργεί μέχρι να αλλάξει η διεύθυνση χωρίς να το αντιληφθείτε.

Ένα CNAME στο zone apex. Το example.com δεν μπορεί νόμιμα να περιέχει CNAME μαζί με τα SOA και NS records του. Ορισμένοι providers προσφέρουν ALIAS, ANAME ή «CNAME flattening» ως λύση· κάποιοι άλλοι όχι. Αν ο δικός σας provider δεν προσφέρει κάτι από αυτά, χρησιμοποιήστε subdomain — app.example.com — και κάντε redirect από το apex.

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

Αν και τα δύο επιστρέψουν κενό αποτέλεσμα, τίποτα άλλο σε αυτή τη λίστα δεν έχει σημασία ακόμη.

Αιτία 3: propagation που δεν μετράτε

Το dig χωρίς ορίσματα ρωτά τον δικό σας resolver, ο οποίος μπορεί να έχει αποθηκεύσει σε cache την απάντηση που μόλις δημιουργήσατε — ή, ακόμη χειρότερα, το NXDOMAIN από πριν δημιουργήσετε την εγγραφή. Μια αρνητική καταχώριση στην cache με μεγάλο TTL είναι πολύ συνηθισμένος λόγος για μια επικύρωση που αποτυγχάνει για μία ώρα και στη συνέχεια ολοκληρώνεται χωρίς καμία παρέμβαση.

Ρωτήστε απευθείας τους authoritative servers και έναν public resolver, ώστε να δείτε τι είναι πιθανό να βλέπει η 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

Αν η authoritative απάντηση είναι σωστή και οι public resolvers δίνουν λάθος αποτέλεσμα, περιμένετε να λήξει το TTL· δεν υπάρχει κάτι που πρέπει να διορθώσετε.

Αιτία 4: το CAA απορρίπτει τον issuer

Αυτό είναι σπάνιο, δεν φαίνεται στους συνήθεις ελέγχους DNS και παραμένει εντελώς αθόρυβο όταν προκαλεί πρόβλημα.

Ένα CAA record στο domain σας καθορίζει ποιες certificate authorities επιτρέπεται να εκδώσουν certificate για αυτό. Αν υπάρχει τέτοια εγγραφή — συχνά κληρονομημένη από παλιότερη ρύθμιση ή προστιθέμενη έπειτα από σύσταση security scan — και δεν περιλαμβάνει τη CA που χρησιμοποιεί η πλατφόρμα σας, η έκδοση αποτυγχάνει και η μόνη ένδειξη βρίσκεται στα logs της CA, στα οποία δεν έχετε πρόσβαση.

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

Κενό αποτέλεσμα σημαίνει ότι δεν υπάρχει περιορισμός, κάτι που είναι εντάξει. Αν επιστραφούν records, προσθέστε τη CA που χρησιμοποιεί η πλατφόρμα σας ή αφαιρέστε τον περιορισμό.

Η σειρά που θα σας οδηγήσει πιο γρήγορα στη λύση

  1. Εκτελέστε dig για το record μέσω public resolver. Αν δεν υπάρχει απάντηση, το record είναι λάθος ή δεν έχει γίνει propagation — σταματήστε εδώ.
  2. Ελέγξτε αν το record είναι proxied. Αν είναι, απενεργοποιήστε τον proxy ή εξαιρέστε το ACME path.
  3. Ελέγξτε το CAA τόσο στο apex όσο και στο subdomain.
  4. Μόνο τότε εξετάστε το ενδεχόμενο να ευθύνεται η πλατφόρμα.

Το ενενήντα τοις εκατό των επικυρώσεων που έχουν κολλήσει καταλήγει στο βήμα 1 ή στο βήμα 2.

Πώς λειτουργεί αυτό στο Dockup

Δύο σχεδιαστικές επιλογές εξαλείφουν το μεγαλύτερο μέρος της αβεβαιότητας.

Το DNS record δημιουργείται για εσάς. Αν το zone σας βρίσκεται στο Cloudflare και έχετε συνδέσει τον λογαριασμό σας, η προσθήκη ενός domain γράφει αυτόματα το record αντί να σας αφήνει να αντιγράψετε χειροκίνητα μια τιμή:

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

Έτσι εξαλείφεται ολόκληρη η κατηγορία λαθών από τυπογραφικά λάθη και λανθασμένους τύπους record — η πλατφόρμα γνωρίζει αν χρειάζεται CNAME ή A record και δημιουργεί το σωστό.

Η παραχώρηση πρόσβασης απαιτεί δύο permissions. Zone:Read και DNS:Edit, και τίποτα άλλο. Το Dockup δεν μπορεί να διαβάσει τα υπόλοιπα zones σας, να αλλάξει ρυθμίσεις λογαριασμού ή να αγγίξει οτιδήποτε για το οποίο δεν του δώσατε δικαιώματα. Η σύνδεση του DNS automation δεν θα έπρεπε να απαιτεί την παράδοση ενός ολόκληρου λογαριασμού.

Η κατάσταση verification και certificate εμφανίζεται ανά domain αντί για μία συνολική κατάσταση, έτσι ώστε το «DNS verified but TLS pending» να αποτυπώνει αυτό που πραγματικά συμβαίνει — δύο ξεχωριστά βήματα, από τα οποία το ένα έχει ολοκληρωθεί.

Συχνές ερωτήσεις

Πόσο χρόνο θα πρέπει να χρειάζεται η έκδοση certificate; Συνήθως λιγότερο από ένα λεπτό, μόλις το DNS κάνει resolve σωστά. Αν η διαδικασία εκκρεμεί για περισσότερο από περίπου δεκαπέντε λεπτά, κάτι την μπλοκάρει· δεν είναι απλώς αργή.

Γιατί το domain μου λειτουργεί στον browser αλλά αποτυγχάνει στην επικύρωση; Επειδή ο browser ακολουθεί redirects και χρησιμοποιεί HTTPS, ενώ το challenge δεν κάνει τίποτα από τα δύο. Ένας proxy που σερβίρει άψογα τον ιστότοπό σας μπορεί και πάλι να καταπιεί το ACME request μέσω απλού HTTP.

Μπορώ να χρησιμοποιήσω CNAME στο root domain μου; Όχι στο standard DNS. Χρησιμοποιήστε μια λειτουργία provider όπως ALIAS ή CNAME flattening ή δείξτε το apex σε ένα subdomain με redirect.

Τι είναι ένα CAA record και το χρειάζομαι; Περιορίζει τις certificate authorities που επιτρέπεται να εκδώσουν certificate για το domain σας. Δεν το χρειάζεστε, αλλά αν έχετε ένα CAA record που δεν περιλαμβάνει τη CA της πλατφόρμας σας, η έκδοση αποτυγχάνει σιωπηλά.