Διασταυρωτά υπογεγραμμένη CA: το κλειδί ταιριάζει, η δέσμευση AKI όχι
Ένα φύλλο μπορεί να καρφιτσώσει τον εκδότη του μέσω αναγνωριστικού κλειδιού μαζί με εκδότη και σειριακό αριθμό. Ελέγξτε αυτή τη δέσμευση πριν θεωρήσετε μια διασταυρωτά υπογεγραμμένη αλυσίδα εναλλάξιμη.
Δύο πιστοποιητικά CA μπορούν να φέρουν το ίδιο δημόσιο κλειδί και το ίδιο υποκείμενο και παρ' όλα αυτά να μην είναι εναλλάξιμα. Το ένα είναι αυτοϋπογεγραμμένο, το άλλο είναι διασταυρωτά υπογεγραμμένο από την παλιά ρίζα, και τα ονόματα εκδότη, οι σειριακοί αριθμοί και οι υπογραφές τους διαφέρουν. Ένα φύλλο μπορεί να δεσμευτεί ειδικά σε ένα από αυτά μέσω του Authority Key Identifier του. Αυτή η δέσμευση μένει αόρατη μέχρι ένας πελάτης να διαλέξει τη λάθος αλυσίδα και η χειραψία να αποτύχει χωρίς προφανή λόγο.
Εκτελέστε αυτούς τους πέντε ελέγχους με σειρά: ο καθένας αποκλείει διαφορετική αποτυχία.
Έλεγχος 1: σχεδιάστε και τις δύο αλυσίδες πριν αγγίξετε το πρότυπο
Γράψτε τις διαδρομές. Ο παλιός πληθυσμός εμπιστεύεται την Παλιά Ρίζα A, η οποία εξέδωσε την CA B, η οποία εξέδωσε το φύλλο του διακομιστή. Ο νέος πληθυσμός εμπιστεύεται απευθείας την αυτοϋπογεγραμμένη CA B. Και τα δύο πιστοποιητικά B φέρουν το ίδιο κλειδί και υποκείμενο, και γι' αυτό ακριβώς κάποιος που διαβάζει μια γραμμή υποκειμένου βλέπει μία CA εκεί όπου ο πελάτης βλέπει δύο.
Το διασταυρωτά υπογεγραμμένο αντίγραφο πρέπει επίσης να είναι γνήσιο πιστοποιητικό CA, με basic constraints και key usage που επιτρέπουν υπογραφή.
Έλεγχος 2: συγκρίνετε τα πεδία AKI, όχι μόνο το κλειδί
Το όνομα εκδότη του φύλλου πρέπει να ταιριάζει με το υποκείμενο της B, και αυτό το μέρος συνήθως ισχύει. Το Authority Key Identifier είναι το σημείο όπου τα δύο αντίγραφα αποκλίνουν, γιατί μπορεί να φέρει αναγνωριστικό κλειδιού, εκδότη πιστοποιητικού και σειριακό αριθμό. Το αναγνωριστικό κλειδιού ταιριάζει και με τα δύο αντίγραφα, αφού το κλειδί είναι ίδιο. Τα πεδία εκδότη και σειριακού αριθμού ταιριάζουν με ένα ακριβώς, γι' αυτό μια αλυσίδα που χτίζεται απέναντι στο αυτοϋπογεγραμμένο αντίγραφο μπορεί να αποτύχει απέναντι στο διασταυρωτά υπογεγραμμένο.
Επιθεωρήστε το φύλλο αντί να μαντεύετε: openssl x509 -in server.pem -noout -ext authorityKeyIdentifier.
Έπειτα συγκρίνετε και τους δύο υποψηφίους με openssl x509 -in b-cross.pem -noout -text | grep -A2 "Authority Key Identifier", και την ίδια εντολή απέναντι στο αυτοϋπογεγραμμένο αντίγραφο.
Αν το φύλλο φέρει εκδότη και σειριακό αριθμό, μόνο το πιστοποιητικό που περιγράφουν αυτές οι τιμές ολοκληρώνει την αλυσίδα, όποιο αντίγραφο κι αν φόρτωσε ο πελάτης.
Έλεγχος 3: αλλάξτε πολιτική έκδοσης, ποτέ υπογεγραμμένα byte
Οι επεκτάσεις ζουν μέσα στην υπογραφή. Η προσθήκη, αφαίρεση ή επεξεργασία μιας σε υπάρχον φύλλο δεν είναι επισκευή, είναι διαφορετικό πιστοποιητικό και απαιτεί επανέκδοση. Η αλλαγή ανήκει στην πολιτική έκδοσης: το authorityKeyIdentifier = keyid,issuer:always κάνει τα νέα φύλλα να φέρουν τη δέσμευση ειδικά για το πιστοποιητικό, ενώ το keyid μόνο του κρατά την πιο χαλαρή μορφή που ταιριάζει σε μια σκόπιμη μετάβαση διασταυρωτής υπογραφής. Αποφασίστε ποια θέλει η PKI σας πριν υπογραφεί η επόμενη παρτίδα.
Η επεξεργασία κοινού προτύπου αλλάζει και κάθε μελλοντικό πιστοποιητικό, όχι μόνο τον διακομιστή μπροστά σας.
Έλεγχος 4: επαληθεύστε κάθε πληθυσμό εμπιστοσύνης χωριστά
Δοκιμάστε την παλιά διαδρομή και τη νέα διαδρομή ως ξεχωριστές εκτελέσεις. Το openssl verify -purpose sslserver -verify_hostname vpn.example -CAfile old-root.pem -untrusted b-cross-signed.pem server.pem ασκεί τη διασταυρωτά υπογεγραμμένη διαδρομή, και η ίδια εντολή με τη νέα ρίζα και χωρίς αρχείο untrusted ασκεί την αυτοϋπογεγραμμένη διαδρομή. Η ανάμιξη και των δύο ριζών σε ένα bundle κρύβει ποια αλυσίδα επιλέχθηκε. Επαναλάβετε μετά με πραγματικούς πελάτες, γιατί ένα VPN backend μπορεί να προτιμήσει μια αλυσίδα ή να καρφιτσώσει ένα πιστοποιητικό με τρόπους που το openssl δεν κάνει.
Παραδώστε το ενδιάμεσο πιστοποιητικό μέσω της διαμόρφωσης υπηρεσίας που διαβάζει πραγματικά ο πελάτης, όχι μέσω σελίδας wiki.
Έλεγχος 5: κρατήστε την παλιά διαδρομή σε ρολόι απόσυρσης
Η διασταυρωτή υπογραφή κρατά ζωντανή μια παλιά διαδρομή εμπιστοσύνης εκ σχεδιασμού, που είναι ταυτόχρονα το νόημα και ο κίνδυνος. Δεν αποκαθιστά μια παραβιασμένη παλιά ρίζα και δεν αφαιρεί αυτή τη ρίζα από κανέναν πελάτη. Γράψτε πότε η παλιά διαδρομή σταματά να παρέχει εμπιστοσύνη και επιβεβαιώστε ότι εκείνη η μέρα έρχεται πραγματικά.
Αν κάθε πελάτης μπορεί να πάρει τη νέα ρίζα πριν μετακινηθούν τα φύλλα, μια απλή ανάπτυξη διπλής εμπιστοσύνης είναι απλούστερη από τη διασταυρωτή υπογραφή και αφήνει ένα πράγμα λιγότερο προς απόσυρση.