Το Certbot αναφέρει επιτυχή ανανέωση, τα αρχεία στον δίσκο φέρουν νέες ημερομηνίες και οι πελάτες εξακολουθούν να συναντούν την παλιά ταυτότητα. Το SoftEther κρατά το πιστοποιητικό SSL του διακομιστή στη δική του ρύθμιση σε επίπεδο διακομιστή, οπότε ένα νέο αρχείο στον δίσκο δεν αλλάζει τίποτα μέχρι να εισαχθούν το φύλλο και το κλειδί του. Η παρακάτω ακολουθία καλύπτει μία χειροκίνητη εισαγωγή, ένα περιτύλιγμα που εκτελείται μετά από κάθε ανανέωση και έναν έλεγχο που διαβάζει τι παρουσιάζει πραγματικά ο ακροατής. Κάθε βήμα αφήνει στοιχεία που μπορείτε να συγκρίνετε μετά την επόμενη ανανέωση.

Ένα ανανεωμένο αρχείο δεν αλλάζει την ταυτότητα του διακομιστή

Η έκδοση και η ανάπτυξη είναι ξεχωριστά γεγονότα με ξεχωριστούς τρόπους αποτυχίας. Ο πελάτης ACME γράφει αρχεία σε έναν κατάλογο γενεαλογίας και καταγράφει επιτυχία· το SoftEther συνεχίζει να χρησιμοποιεί όποιο πιστοποιητικό φορτώθηκε τελευταία στη ρύθμισή του. Έτσι, μια κατάσταση εξόδου μηδέν περιγράφει τα αρχεία, όχι την υπηρεσία, και τα δύο μπορούν να διαφωνούν όσο κανείς δεν κοιτάζει. Αντιμετωπίστε την εισαγωγή ως το βήμα ανάπτυξης και την ανανέωση ως την είσοδό της.

Αυτή η διάκριση εξηγεί και την μπερδεμένη μισή αποτυχία: το παλιό πιστοποιητικό λειτουργεί μέχρι τη λήξη του, οπότε αρχικά τίποτα δεν φαίνεται χαλασμένο. Όταν λήξει, όλοι οι πελάτες αποτυγχάνουν ταυτόχρονα, κάτι που μοιάζει με διακοπή και όχι με χαμένο βήμα ανάπτυξης. Ο έλεγχος της παρουσιαζόμενης ταυτότητας μετά από κάθε ανανέωση μετατρέπει αυτή την έκπληξη σε συνηθισμένη παρατήρηση.

Διαλέξτε την πρόκληση που ταιριάζει στον ακροατή

Το πιστοποιητικό πρέπει να ονομάζει τον κεντρικό υπολογιστή που επαληθεύουν οι πελάτες, οπότε χρησιμοποιήστε το δημόσιο όνομα DNS και όχι μια εσωτερική ετικέτα ή μια διεύθυνση. Το HTTP-01 απαιτεί να απαντηθεί η πρόκληση στη θύρα 80 για μια στιγμή, κάτι που είναι προσωρινός ακροατής και ποτέ λόγος να μετακινήσετε τη δική του θύρα του SoftEther. Το DNS-01 αποδεικνύει τον έλεγχο μέσω μιας εγγραφής και δεν χρειάζεται καθόλου εισερχόμενο HTTP.

Η ανανέωση χωρίς επίβλεψη σημαίνει αυτοματοποιημένη ενσωμάτωση DNS με διαπιστευτήρια περιορισμένα στη μία ζώνη, όχι μια εγγραφή TXT που πληκτρολογείται με το χέρι κάθε δύο μήνες. Ένας μπαλαντέρ αλλάζει τον τύπο της πρόκλησης, όχι την ανάγκη για αυτή την αυτοματοποίηση. Αποφασίστε το πριν υπάρξει το πρώτο πιστοποιητικό, γιατί η αλλαγή τύπου πρόκλησης αργότερα σημαίνει να αγγίξετε μαζί τη ρύθμιση του πελάτη και το τείχος προστασίας.

Κρατήστε τα τεχνουργήματα σε τάξη όσο είστε εδώ. Το φύλλο και τα ενδιάμεσα φτάνουν ως ξεχωριστά αρχεία και ως ένα συνδυασμένο αρχείο αλυσίδας, το ιδιωτικό κλειδί είναι πάλι ξεχωριστό, και η εισαγωγή χρειάζεται την αλυσίδα με το αντίστοιχο κλειδί της και όχι ένα δημόσιο πιστοποιητικό μόνο του.

Εισαγάγετε την αλυσίδα σε επίπεδο διακομιστή

Κάντε αντίγραφο ασφαλείας της ρύθμισης του διακομιστή και επιβεβαιώστε ότι μπορείτε ακόμη να φτάσετε τη διεπαφή διαχείρισης πριν αγγίξετε το πιστοποιητικό. Συνδεθείτε ως διαχειριστής διακομιστή και όχι ως διαχειριστής Virtual Hub, γιατί το πιστοποιητικό ανήκει στο αντικείμενο του διακομιστή. Στη συνέχεια φορτώστε την αλυσίδα και το κλειδί με απόλυτη διαδρομή, από αρχεία που μπορεί να διαβάσει ο λογαριασμός που εκτελεί την εντολή. Σημειώστε ότι οι διαδρομές είναι απόλυτες γιατί η εντολή τις επιλύει από τον κατάλογο εργασίας της διεργασίας που έτρεξε το vpncmd:

ServerCertSet /LOADCERT:/etc/letsencrypt/live/vpn.example.com/fullchain.pem /LOADKEY:/etc/letsencrypt/live/vpn.example.com/privkey.pem

Διαβάστε την έξοδο της εντολής αντί να υποθέσετε επιτυχία, και μετά διαβάστε την αλυσίδα ξανά αντί να εμπιστευτείτε το αρχείο που δώσατε. Το όριο ανάμεσα σε εκδόσεις που εισάγουν ένα ολόκληρο πακέτο PEM και σε εκδόσεις που παίρνουν μόνο το πρώτο πιστοποιητικό δεν τεκμηριώνεται σε ένα σημείο, οπότε ο έλεγχος είναι αυτό που το κρίνει για την έκδοση μπροστά σας. Μετρήστε τα πιστοποιητικά που παρουσιάζει ο ακροατής· ένα φύλλο χωρίς ενδιάμεσα είναι η υπογραφή ενός εισαγωγέα που κατανάλωσε μόνο το πρώτο μπλοκ.

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

Συνδέστε την ανάπτυξη, όχι την ανανέωση

Μόλις λειτουργήσει η χειροκίνητη εισαγωγή, βάλτε ακριβώς αυτά τα βήματα σε ένα μικρό περιτύλιγμα και καλέστε το από τον πελάτη ACME μετά από επιτυχή ανανέωση. Το Certbot ορίζει τα RENEWED_LINEAGE και RENEWED_DOMAINS για το άγκιστρο, ώστε το περιτύλιγμα να μπορεί να δράσει σε ένα πιστοποιητικό σε μηχάνημα που διαχειρίζεται πολλά. Φιλτράρετε με βάση τη γενεαλογία αντί να αντιδράτε σε κάθε ανανέωση στον κεντρικό υπολογιστή. Το περιτύλιγμα είναι κώδικας ανάπτυξης που εκτελείται με τα προνόμια του διακομιστή, οπότε εξετάστε το όπως κάθε άλλο σενάριο σε αυτή τη θέση.

certbot renew --deploy-hook /usr/local/sbin/softether-deploy.sh

Ένα άγκιστρο που εκτελείται χωρίς επίβλεψη χρειάζεται το δικό του προστατευμένο αποθετήριο διαπιστευτηρίων και ένα σήμα αποτυχίας που φτάνει σε άνθρωπο. Αν η έκδοση πετύχει και η εισαγωγή αποτύχει, επαναλάβετε την εισαγωγή αντί να ζητήσετε άλλο πιστοποιητικό, γιατί ένα δεύτερο αίτημα κρύβει το ελάττωμα ανάπτυξης πίσω από ένα νέο αρχείο. Η τεκμηρίωση ανανέωσης του Certbot είναι σαφής ότι μια εκτέλεση που δεν ενημερώνει τίποτα είναι φυσιολογικό αποτέλεσμα, οπότε το άγκιστρο είναι αυτό που ξεχωρίζει τα δύο.

Συγκρίνετε την παρουσιαζόμενη αλυσίδα με το αρχείο

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

openssl s_client -connect vpn.example.com:443 -servername vpn.example.com -showcerts </dev/null 2>/dev/null | grep -c 'BEGIN CERTIFICATE'
openssl s_client -connect vpn.example.com:443 -servername vpn.example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -dates -fingerprint -sha256

Μετά δημιουργήστε νέα σύνδεση πελάτη, γιατί οι συνεδρίες που στήθηκαν πριν από την εισαγωγή πιστοποιήθηκαν απέναντι στην προηγούμενη ταυτότητα και δεν αποδεικνύουν τίποτα για τη νέα. Αν οι πελάτες καρφιτσώνουν το παλιό φύλλο, χρειάζονται συντονισμένη ενημέρωση ακόμη και όταν η δημόσια αλυσίδα είναι έγκυρη, και αυτή η εργασία ανήκει στο ίδιο runbook με την ανανέωση. Ένας αντίστροφος διακομιστής μεσολάβησης μπροστά από την υπηρεσία μπορεί να παρουσιάσει καλό πιστοποιητικό ενώ ο ακροατής VPN κρατά ακόμη το παλιό, και γι' αυτό ο έλεγχος πρέπει να ονομάζει τη θύρα που φτάνουν πραγματικά οι πελάτες. Καταγράψτε το αποτύπωμα δίπλα στην ημερομηνία ανανέωσης, ώστε η επόμενη σύγκριση να είναι έλεγχος και όχι πράξη μνήμης.

Σχετικά άρθρα