Ανακλημένο πιστοποιητικό VPN συνδέεται ακόμη; Έλεγξε την εφαρμογή CRL
Τα ανακλημένα πιστοποιητικά συνδέονται ακόμη όταν το CRL δεν φτάνει ποτέ στον επαληθευτή. Έλεγξε με αυτή τη σειρά εκδότη, φορτωμένο σειριακό αριθμό, συμπεριφορά επαναφόρτωσης και ενεργές συνεδρίες.
Ανακάλεσες το πιστοποιητικό, δημιούργησες νέα λίστα, και το παλιό προφίλ σηκώνει ακόμη τούνελ. Η ανάκληση καθαυτή δεν είναι χαλασμένη: ένα CRL είναι μια υπογεγραμμένη δήλωση ότι ένας σειριακός αριθμός δεν είναι πια έγκυρος, και αλλάζει την πρόσβαση μόνο όταν το στοιχείο που τερματίζει το TLS το φορτώσει, για τον σωστό εκδότη, πριν λάβει την απόφαση αποδοχής. Εκεί βρίσκονται οι περισσότερες από αυτές τις περιπτώσεις, και γι' αυτό η ανάκληση και η άρνηση είναι δύο ξεχωριστά γεγονότα.
Δούλεψε τους πέντε ελέγχους παρακάτω με σειρά, και σταμάτα στον πρώτο που δεν ισχύει, γιατί κάθε επόμενος έλεγχος προϋποθέτει ότι οι προηγούμενοι είναι αληθείς.
Έλεγξε ποιο στοιχείο λαμβάνει την απόφαση αποδοχής
Ονόμασε τη διεργασία που επικυρώνει το πιστοποιητικό του πελάτη, γιατί μόνο αυτή η διεργασία μπορεί να εφαρμόσει μια λίστα. Σε διακομιστή OpenVPN είναι ο ίδιος ο δαίμονας, ρυθμισμένος με crl-verify. Στο ocserv είναι η γραμμή crl στο ocserv.conf. Στο strongSwan οι είσοδοι είναι τα φορτωμένα CRL μαζί με strictcrlpolicy. Ένας διαμεσολαβητής ή συσκευή που τερματίζει TLS μπροστά από το VPN μπορεί επίσης να είναι ο πραγματικός επαληθευτής, και αν είναι, ο δαίμονας πίσω του δεν βλέπει ποτέ το πιστοποιητικό του πελάτη.
Το WireGuard ανήκει σε άλλη κατηγορία. Δεν έχει πιστοποιητικά ούτε λίστα ανάκλησης· ένα peer γίνεται δεκτό με το δημόσιο κλειδί του στη διαμόρφωση, άρα ο τερματισμός της πρόσβασης σημαίνει αφαίρεση αυτού του κλειδιού. Αν ψάχνεις CRL σε εγκατάσταση μόνο με WireGuard, αυτός ο μηχανισμός δεν υπάρχει.
Πρόσεξε και την παγίδα στην πλευρά του πελάτη. Ένας πελάτης που αρνείται να συνδεθεί επειδή δεν του αρέσει το πιστοποιητικό του διακομιστή εφαρμόζει την αλυσίδα του διακομιστή, δεν ανακαλεί το δικό του διαπιστευτήριο. Ένα πιστοποιητικό χρήστη ανακαλείται μόνο εκεί όπου επικυρώνεται αυτό το πιστοποιητικό χρήστη, και αυτό είναι σχεδόν πάντα η πλευρά του διακομιστή.
Έλεγξε για ποιον εκδότη υπογράφηκε η λίστα
Ένα CRL περιορίζεται σε μία εκδότρια CA. Με ρίζα και ενδιάμεση, τα φύλλα προέρχονται από την ενδιάμεση, άρα η λίστα που μετράει είναι το CRL της ενδιάμεσης· η λίστα της ρίζας δεν λέει τίποτα για αυτά τα φύλλα. Ένας επαληθευτής που δείχνει σε λάθος αρχείο το αναλύει με χαρά, δεν βρίσκει καμία αντίστοιχη εγγραφή και δέχεται τα πάντα.
Επιβεβαίωσε το ζεύγος πριν αγγίξεις τον δαίμονα. Ο εκδότης στο πιστοποιητικό πρέπει να ταιριάζει με το subject της λίστας:
openssl x509 -in client.crt -noout -issuer -serial
openssl crl -in intermediate.crl -noout -issuer -lastupdate -nextupdateΌταν και τα δύο προέρχονται από την ίδια CA, ο σειριακός αριθμός που εκτυπώθηκε για το πιστοποιητικό είναι η τιμή που πρέπει να εμφανίζεται στη λίστα. Αν δεν συμφωνούν, κρατάς λάθος CRL ή λάθος αντίγραφό του.
Η εγκυρότητα ανήκει στον ίδιο έλεγχο. Ένα nextUpdate στο παρελθόν κάνει τη λίστα παρωχημένη, και ένας επαληθευτής που αποτυγχάνει κλειστά θα απορρίψει τότε κάθε πελάτη αντί μόνο τον ανακλημένο.
Έλεγξε ότι ο σειριακός αριθμός βρίσκεται στο αντίγραφο που φόρτωσε ο δαίμονας
Η ανάκληση γράφει μια εγγραφή στη βάση δεδομένων της CA, και η αναδημιουργία γράφει νέο αρχείο. Καμία από τις δύο ενέργειες δεν φτάνει σε έναν δαίμονα που τρέχει και φόρτωσε το παλιό αντίγραφο κατά την εκκίνηση. Κάνε dump τη λίστα και ψάξε τον σειριακό αριθμό:
openssl crl -in intermediate.crl -noout -text | grep -i -A2 'Serial Number'
openssl ca -revoke client.crt
openssl ca -gencrl -out intermediate.crlΈπειτα έλεγξε πώς η υλοποίησή σου παίρνει το αρχείο. Το OpenVPN διαβάζει μια διαδρομή που δίνεται στο crl-verify μία φορά κατά την εκκίνηση, άρα μια νέα λίστα απαιτεί επανεκκίνηση ή σήμα επανεκκίνησης· η ίδια επιλογή στραμμένη σε κατάλογο ξαναδιαβάζεται σε κάθε σύνδεση, και γι' αυτό υπάρχει η λειτουργία καταλόγου. Το strongSwan χρειάζεται επαναφόρτωση των διαπιστευτηρίων του, για παράδειγμα με swanctl --load-creds. Το ότι το αρχείο στον δίσκο είναι σωστό και το ότι ο επαληθευτής το χρησιμοποιεί είναι δύο διαφορετικά γεγονότα.
Έλεγξε την πολιτική για λίστα που λείπει ή έχει λήξει
Αυτή είναι η απόφαση που πολλές εγκαταστάσεις δεν παίρνουν ποτέ ρητά, και καθορίζει αν η ανάκληση σε προστατεύει ή κλειδώνει όλους έξω. Fail-closed σημαίνει ότι καμία χρησιμοποιήσιμη πληροφορία ανάκλησης δεν παράγει απόρριψη· fail-open σημαίνει ότι ο επαληθευτής προχωρά χωρίς αυτή. Το strongSwan εκθέτει την επιλογή ως strictcrlpolicy. Το OpenVPN με crl-verify αρνείται να ξεκινήσει με αρχείο που δεν μπορεί να διαβάσει ή να αναλύσει, και μια λίστα που έχει λήξει εμφανίζεται ως σφάλμα επαλήθευσης TLS για ληγμένο CRL αντί ως σιωπηλή αποδοχή.
| State of the revocation data | Fail-closed result | Fail-open result |
|---|---|---|
| List missing or unreadable | Verification fails, so expect an outage | Every client connects, including the revoked one |
List past nextUpdate | Validation errors until a fresh list is deployed | Old status is trusted indefinitely |
| Revoked serial present in the loaded list | Handshake rejected for that certificate | Handshake rejected for that certificate |
Όποια κατεύθυνση κι αν διαλέξεις, η αυτοματοποίηση μετράει περισσότερο από την επιλογή: μια εργασία που αναδημιουργεί το CRL πριν από το nextUpdate, και μια ειδοποίηση όταν το αναπτυγμένο αντίγραφο γερνά, κρατούν και τις δύο πολιτικές μακριά από το να γίνουν περιστατικό. Ο διαδικτυακός έλεγχος με OCSP μεταφέρει τη φρεσκάδα σε έναν responder, αλλά ισχύει ο ίδιος κανόνας, γιατί ένας επαληθευτής που δεν έχει ρυθμιστεί να ελέγχει την απάντηση δεν αλλάζει τίποτα.
Έλεγξε την ενεργή συνεδρία, και μετά τα αντίγραφα του κλειδιού
Η ανάκληση αξιολογείται κατά την επικύρωση του πιστοποιητικού, που γίνεται στη σύνδεση και στην επαναδιαπραγμάτευση. Μια εδραιωμένη συνεδρία συνεχίζει μέχρι να επαναδιαπραγματευτεί, και η προεπιλογή του OpenVPN είναι μία φορά την ώρα με reneg-sec 3600. Αν το άτομο πρέπει να βγει από το δίκτυο τώρα, τερμάτισε τη συνεδρία μαζί με τη δημοσίευση της λίστας, και μετά επιβεβαίωσε ότι η επανασύνδεση απορρίπτεται.
Χώρισε το διαπιστευτήριο από τα αντίγραφά του. Η διαγραφή ενός προφίλ σε ένα φορητό δεν εμποδίζει ένα άλλο αντίγραφο του ίδιου ιδιωτικού κλειδιού να ταυτοποιηθεί· η ανάκληση είναι αυτό που κάνει κάθε αντίγραφο άχρηστο, και μόνο όταν ισχύουν οι προηγούμενοι έλεγχοι. Δώσε σε μια συσκευή αντικατάστασης δικό της πιστοποιητικό ώστε το ένα να μπορεί να ανακληθεί χωρίς να αγγίξεις το άλλο.
Πριν το θεωρήσεις τελειωμένο: το στοιχείο επικύρωσης έχει εντοπιστεί, ο εκδότης της λίστας ταιριάζει με τον εκδότη του φύλλου, ο ανακλημένος σειριακός αριθμός βρίσκεται στο αντίγραφο που φόρτωσε πραγματικά ο δαίμονας, η πολιτική για λίστες που λείπουν ή έχουν λήξει είναι σκόπιμη και παρακολουθείται, και η ενεργή συνεδρία τερματίστηκε αντί να περιμένει. Οι μορφότυποι πίσω από όλα αυτά ορίζονται στο RFC 5280.