Τι συμβαίνει όταν αντικαθιστάτε μια αρχή πιστοποίησης VPN
Η αντικατάσταση μιας CA VPN αλλάζει ξεχωριστά την εμπιστοσύνη και την ταυτότητα. Τι ελέγχουν οι επαληθευτές, γιατί τα παλιά τούνελ το επιβιώνουν και πώς αποδεικνύετε ότι δουλεύουν και οι δύο κατευθύνσεις.
Η αντικατάσταση μιας αρχής πιστοποίησης VPN δεν είναι αλλαγή αρχείου. Τη στιγμή που η νέα CA υπογράφει το πρώτο της πιστοποιητικό, κάθε επαληθευτής που εξακολουθεί να εμπιστεύεται μόνο την παλιά πρέπει να αποφασίσει, και οι κόμβοι που δεν λαμβάνουν ποτέ τη νέα άγκυρα συνεχίζουν να απορρίπτουν καλούς ομοτίμους. Το έχω δει να χαλάει και προς τις δύο κατευθύνσεις: η πύλη έμαθε τη νέα CA και οι πελάτες όχι, οπότε οι νέες συνδέσεις αποτύγχαναν, ενώ τα τούνελ που ήταν ήδη πάνω έμειναν και έκαναν τη διακοπή να μοιάζει με πρόβλημα δρομολόγησης. Ακολουθεί τι αλλάζει, με τη σειρά που εμφανίζονται οι αστοχίες.
Μία αντικατάσταση, δύο ξεχωριστές αλλαγές
Μια αρχή πιστοποίησης είναι ένα όνομα, ένα δημόσιο κλειδί και το ιδιωτικό κλειδί που υπογράφει. Οι επαληθευτές δεν εμπιστεύονται ποτέ «την CA» αφηρημένα. Εμπιστεύονται ένα συγκεκριμένο πιστοποιητικό που βρίσκεται ήδη σε έναν χώρο εμπιστοσύνης και δέχονται έναν εκδότη μόνο αν μια αλυσίδα υπογραφών φτάσει σε εκείνο το αποθηκευμένο αντίγραφο. Η αντικατάσταση της CA επομένως αλλάζει δύο πράγματα που αποτυγχάνουν ανεξάρτητα: ποιες άγκυρες γίνονται δεκτές και ποιες ταυτότητες ομοτίμων εκδόθηκαν κάτω από αυτές.
Οι περισσότερες εγκαταστάσεις VPN επαληθεύουν και προς τις δύο κατευθύνσεις. Ο πελάτης πιστοποιεί το πιστοποιητικό της πύλης και η πύλη το πιστοποιητικό του πελάτη. Μια μετάβαση που ανανεώνει μόνο το πακέτο του πελάτη αφήνει τον διακομιστή να απορρίπτει κάθε πελάτη που εξακολουθεί να παρουσιάζει ταυτότητα της παλιάς CA, και το αντίστροφο είναι εξίσου συχνό. Καταγράψτε πρώτα τα σημεία επιβολής: τους χώρους εμπιστοσύνης των πελατών, το αρχείο ca της πύλης, οποιονδήποτε μεσολαβητή τερματίζει TLS μπροστά της και τον έλεγχο που δοκιμάζει το τελικό σημείο από έξω.
Τι ελέγχει ένας επαληθευτής, με σειρά
Η επαλήθευση διαδρομής ανεβαίνει από το πιστοποιητικό του ομοτίμου μέσα από τυχόν ενδιάμεσα έως ότου φτάσει σε έμπιστη άγκυρα. Σε κάθε βήμα επαληθεύει την υπογραφή, ελέγχει ότι κάθε πιστοποιητικό βρίσκεται μέσα στο παράθυρο ισχύος του και επιβεβαιώνει ότι οι βασικοί περιορισμοί και η χρήση κλειδιού επιτρέπουν στον εκδότη να υπογράφει. Μόνο τότε η εφαρμογή κοιτάζει το τελικό πιστοποιητικό: τα εναλλακτικά ονόματα υποκειμένου πρέπει να καλύπτουν το όνομα στο οποίο έγινε η κλήση και η εκτεταμένη χρήση κλειδιού πρέπει να επιτρέπει πιστοποίηση διακομιστή ή πελάτη.
Για να επαναλάβετε αυτή τη διαδρομή εκτός σύνδεσης, στρέψτε το -CAfile στο ακριβές πακέτο που θα αναπτύξετε και όχι στον χώρο του συστήματος. Διαφορετικά δοκιμάζετε τον κόμβο, όχι την αλλαγή:
openssl verify -CAfile new-ca.crt gateway.crt
openssl verify -CAfile new-ca.crt -untrusted intermediate.crt client.crt
openssl x509 -in gateway.crt -noout -subject -issuer -dates
openssl s_client -connect gw.example.net:443 -CAfile new-ca.crt
Αυτή η εντολή λειτουργεί μόνο απέναντι σε έναν απλό ακροατή TLS, όπως η σελίδα διαχείρισης HTTPS της πύλης· το κανάλι ελέγχου του OpenVPN προηγείται του TLS, οπότε το s_client δεν μπορεί να επιθεωρήσει τη χειραψία του τούνελ.
Οι κανόνες δόμησης διαδρομής πίσω από αυτά τα σφάλματα βρίσκονται στο RFC 5280 ενότητα 6. Εξηγούν τις αστοχίες που αλλιώς μοιάζουν αυθαίρετες: ένα ληγμένο ενδιάμεσο που κανείς δεν θυμόταν, ένα πιστοποιητικό του οποίου η χρήση κλειδιού απαγορεύει την υπογραφή ή έναν περιορισμό ονόματος που αποκλείει τον κόμβο που δοκιμάζετε.
Γιατί το παλιό τούνελ συνεχίζει να δουλεύει
Τα TLS και OpenVPN κρατούν και τα δύο μια εγκατεστημένη συνεδρία ζωντανή αφού ολοκληρωθεί η χειραψία. Τίποτα δεν επαληθεύει ξανά το πιστοποιητικό του ομοτίμου ανά πακέτο, οπότε ένας πελάτης που συνδέθηκε πριν από την αλλαγή συνεχίζει να περνά κίνηση έως ότου επαναδιαπραγματευτεί, επανασυνδεθεί ή πέσει το τούνελ. Αυτό το κενό είναι ο λόγος που μια αντικατάσταση CA μπορεί να φαίνεται εντάξει για μία ώρα και μετά να αποτυγχάνει στη χειρότερη στιγμή: ένα φορητό ξυπνά από αναστολή, μια αντιστοίχιση NAT λήγει, μια πύλη επανεκκινεί.
Η επανάληψη συνεδρίας τεντώνει την ψευδαίσθηση περισσότερο. Ένα εισιτήριο συνεδρίας TLS επιτρέπει στον πελάτη να επιστρέψει χωρίς να ξαναστείλει πιστοποιητικά, και η επανάληψη παρακάμπτει την επαλήθευση διαδρομής επειδή η πρώτη χειραψία την έκανε ήδη. Άρα ο έντιμος έλεγχος είναι μια πλήρης χειραψία σε νέα διεργασία. Επανεκκινήστε τον πελάτη αντί να επανασυνδέσετε το τούνελ, και σε δοκιμαστικό προφίλ σκεφτείτε να απενεργοποιήσετε τα εισιτήρια ώστε η διαδρομή επανάληψης να μην μπορεί να κρύψει μια σπασμένη αλυσίδα.
Κρατήστε το επίπεδο στατικού κλειδιού ξεχωριστό από αυτό. Το tls-auth προσθέτει HMAC στο κανάλι ελέγχου, το tls-crypt το κρυπτογραφεί και το πιστοποιεί, και κανένα από τα δύο δεν μεταφέρει υλικό πιστοποιητικού, οπότε η περιστροφή οποιουδήποτε από τα δύο είναι ξεχωριστή αλλαγή με δικό της τρόπο αστοχίας. Οι εγκαταστάσεις που μπερδεύουν τα δύο καταλήγουν με πελάτη του οποίου το στατικό κλειδί είναι εντάξει, το πιστοποιητικό είναι παρωχημένο και το μήνυμα σφάλματος δεν αναφέρει κανένα από τα δύο.
Η παγίδα της επαναχρησιμοποίησης του ονόματος υποκειμένου
Είναι δελεαστικό να επαναχρησιμοποιήσετε το διακεκριμένο όνομα του προκατόχου ώστε τίποτα πιο κάτω να μην πρέπει να αλλάξει. Αυτό κρατά σταθερή τη γραμμή του εκδότη στη διεπαφή και καταστρέφει το ένα σήμα που χρειάζεστε. Δύο πιστοποιητικά με ίδια υποκείμενα και διαφορετικά κλειδιά δεν ξεχωρίζουν με το όνομα, οπότε ένα πακέτο με τις δύο άγκυρες δίνει στον επαληθευτή δύο υποψηφίους και κανέναν κανόνα επιλογής.
Η δόμηση διαδρομής μπορεί τότε να διαλέξει το λάθος, να αναφέρει «δεν είναι δυνατή η λήψη πιστοποιητικού τοπικού εκδότη» ενώ η σωστή άγκυρα είναι παρούσα, ή να πετύχει σε έναν κόμβο και να αποτύχει σε άλλον με το ίδιο πακέτο, επειδή διέφερε η σειρά υποψηφίων. Αν το όνομα πρέπει να επαναχρησιμοποιηθεί, κρατήστε τις δύο άγκυρες σε ξεχωριστά αρχεία κατά τη μετάβαση και φορτώστε τις ρητά, και συγχωνεύστε τις μόνο όταν κάθε ομότιμος παρουσιάζει τον νέο εκδότη. Αλλιώς δώστε στην αντικατάσταση ένα ξεχωριστό κοινό όνομα — ένα επίθημα γενιάς ή ημερομηνίας αρκεί — ώστε τα αρχεία καταγραφής και τα κείμενα σφαλμάτων να λένε κάτω από ποια αρχή εκδόθηκε ο ομότιμος που αποτυγχάνει.
Μια μετάβαση που δεν ρίχνει το δίκτυο
Για προγραμματισμένη αντικατάσταση, δέχεστε και τις δύο άγκυρες για περιορισμένο διάστημα αντί να αλλάξετε με ένα βήμα. Εκδώστε τη νέα CA και τα ενδιάμεσά της, βάλτε τη νέα άγκυρα στο πακέτο κάθε επαληθευτή δίπλα στην παλιά, και μόνο τότε αρχίστε να εκδίδετε πιστοποιητικά ομοτίμων από αυτήν. Οι ομότιμοι με παλιές ταυτότητες επαληθεύονται με την παλιά άγκυρα· οι νέοι λειτουργούν με τη νέα.
Αν γίνει με αυτή τη σειρά, κάθε βήμα είναι αναστρέψιμο. Η αστοχία που αποφεύγετε είναι η ταυτόχρονη αλλαγή, όπου ένας πελάτης που έχασε την ενημέρωση του πακέτου συναντά μια πύλη που έχει ήδη αποσύρει την παλιά άγκυρα, η χειραψία πεθαίνει και κανένα αρχείο καταγραφής δεν λέει ποια πλευρά είναι παρωχημένη.
Αποσύρετε προς την αντίθετη κατεύθυνση. Επανεκδώστε κάθε ταυτότητα που πρέπει να επιβιώσει, επιβεβαιώστε ότι καθεμία παρουσιάζει τη νέα αλυσίδα, και μετά αφαιρέστε την παλιά άγκυρα από τα πακέτα. Βγάλτε το ιδιωτικό κλειδί της παλιάς CA από τη λειτουργία, γιατί ένας εκδότης που μπορεί ακόμη να υπογράφει σημαίνει ότι η μετάβαση δεν ολοκληρώθηκε. Κρατήστε τα πιστοποιητικά και τα αρχεία έκδοσης για έλεγχο. Ένας χαμένος εκδότης αποκαθίσταται στην ίδια εμπιστοσύνη· μια διαρροή απαιτεί νέες ταυτότητες και καμία επιστροφή στην παλιά άγκυρα.
Επαληθεύστε το αποτέλεσμα, όχι τη λίστα αρχείων
Ένα αρχείο εμπιστοσύνης στον αναμενόμενο κατάλογο αποδεικνύει λίγα. Η εφαρμογή μπορεί να διαβάζει άλλη διαδρομή, άλλη μορφή ή αντίγραφο μέσα σε πακέτο που αντικαθιστά μια αναβάθμιση. Ελέγξτε τη συμπεριφορά στα δύο άκρα, όχι αν υπάρχει αρχείο.
Επιβεβαιώστε ότι μια νέα σύνδεση με νέα ταυτότητα πετυχαίνει, και μετά ότι μια ταυτότητα που εκδόθηκε από την αποσυρμένη CA απορρίπτεται. Αυτός ο δεύτερος έλεγχος είναι αυτός που οι άνθρωποι προσπερνούν και ο μόνος που δείχνει ότι η παλιά αρχή δεν δίνει πλέον πρόσβαση. Όπου η εγκατάσταση βασίζεται σε CRL ή OCSP, ελέγξτε ότι τα σημεία διανομής στα νέα πιστοποιητικά επιλύονται και ότι ο αποκρινόμενος είναι προσβάσιμος από τους ομοτίμους που τον ρωτούν.
Τελειώστε με έναν πελάτη που δεν συνδέθηκε ποτέ: σβήστε την κατάσταση του προφίλ του, συνδεθείτε και διαβάστε την αλυσίδα που διαπραγματεύτηκε. Ένας ομότιμος που επαναλαμβάνει μια προσωρινά αποθηκευμένη συνεδρία θα αναφέρει με χαρά ότι η μετανάστευση πέτυχε, ενώ δεν επαλήθευσε τίποτα.