Πού πρέπει να ζει ένα ιδιωτικό κλειδί VPN: αρχείο, CNG ή TPM;
Επιλέξτε ανάμεσα σε αρχείο κλειδιού, μη εξαγώγιμη αποθήκη λογισμικού και TPM για μια ταυτότητα VPN και αποδείξτε την επιλογή με εντολές και σχέδιο επαναφοράς.
Δύο ερωτήματα καθορίζουν πού ανήκει ένα ιδιωτικό κλειδί VPN: αν το υλικό του κλειδιού μπορεί να αντιγραφεί από τον κεντρικό υπολογιστή και αν μια διεργασία μπορεί να το χρησιμοποιήσει χωρίς κανέναν στο πληκτρολόγιο. Η ετικέτα μάρκετινγκ μιας αποθήκης δεν απαντά σε κανένα από τα δύο. Ένας δαίμονας σήραγγας που πρέπει να επανέλθει μετά από επανεκκίνηση χρειάζεται χρήση χωρίς επιτήρηση, κάτι που αποκλείει ό,τι εξαρτάται από PIN που πληκτρολογεί άνθρωπος.
Επιλέξτε ανάμεσα σε αντιγραφή και χρήση
Η αντιγραφή και η χρήση αποτυγχάνουν διαφορετικά, γι' αυτό αντιμετωπίστε τα ως δύο απαιτήσεις και όχι μία. Ένας εισβολέας που μπορεί να διαβάσει τα byte του κλειδιού μεταφέρει την ταυτότητα σε άλλον κεντρικό υπολογιστή, και το αρχικό μηχάνημα δεν το αντιλαμβάνεται. Ένας εισβολέας που δεν μπορεί να διαβάσει τα byte αλλά φτάνει στη διαδικασία υπογραφής εξακολουθεί να πιστοποιείται για όσο διαρκεί αυτή η πρόσβαση.
Ένα κλειδί σε αρχείο αντιγράφεται ασήμαντα, γι' αυτό είναι και το ευκολότερο σε αντίγραφο ασφαλείας και επαναφορά. Μια αποθήκη κλειδιών λογισμικού αλλάζει το API, όχι το όριο: ο πάροχος αρνείται τις δικές του κλήσεις εξαγωγής, αλλά το ίδιο περιβάλλον διαχειριστή που εγκατέστησε το κλειδί έχει συνήθως άλλες διαδρομές προς το υλικό. Το μη εξαγώγιμο σε πάροχο λογισμικού είναι δήλωση για τις υποστηριζόμενες λειτουργίες, όχι απόδειξη τοίχου υλικού. Θεωρήστε το επιβραδυντικό κατά της περιστασιακής αντιγραφής, όχι προστασία από κάποιον που έχει ήδη τη συνεδρία σας.
Ένα TPM ή μια έξυπνη κάρτα εκτελεί τη λειτουργία υπογραφής μέσα στο υλικό και επιστρέφει μόνο το αποτέλεσμα. Αυτό κλείνει τη διαδρομή αντιγραφής και αφήνει τη διαδρομή χρήσης ανοιχτή σε ό,τι μπορεί να ζητήσει υπογραφή.
Αντιστοιχίστε την αποθήκη με τον δαίμονα σήραγγας
Ο δαίμονας το περιορίζει περισσότερο από την πολιτική ασφαλείας. Το WireGuard παίρνει ένα ιδιωτικό κλειδί base64 από αρχείο ή από την είσοδο wg set και δεν έχει διαδρομή προς αποθήκη πιστοποιητικών, οπότε ένα κλειδί διεπαφής με υποστήριξη TPM δεν τίθεται καν. Το OpenVPN που έχει μεταγλωττιστεί με OpenSSL 3 μπορεί να φορτώσει κλειδί μέσω URI παρόχου, και το strongSwan παρέχει πρόσθετο TPM μαζί με υποστήριξη PKCS#11, αλλά και τα δύο εξαρτώνται από το πώς μεταγλωττίστηκε το πακέτο σας.
Ένας δαίμονας που δεν φτάνει στην επιλεγμένη αποθήκη κάνει το όριο υλικού διακόσμηση. Κάποιος εξάγει το κλειδί μία φορά, το αφήνει σε αρχείο, και το υπόλοιπο σχέδιο τρέχει ήσυχα σε αυτό το αντίγραφο.
Η ανανέωση είναι το άλλο μισό της αντιστοίχισης, και εκεί καταρρέουν τα περισσότερα σχέδια. Μια αποθήκη που λειτουργεί στην πρώτη εγγραφή αλλά απαιτεί σύνδεση κονσόλας για κάθε επανέκδοση παρακάμπτεται την πρώτη φορά που ένα πιστοποιητικό λήγει σε άβολη ώρα. Δοκιμάστε τη διαδρομή επανέκδοσης όσο το τρέχον κλειδί έχει ακόμη μήνες.
Απογράψτε το κλειδί πριν το μετακινήσετε
Καταγράψτε τι είναι το κλειδί πριν αλλάξετε πού ζει, γιατί μια μετανάστευση που χάνει τα subject alternative names σπάει τη σήραγγα με τρόπο που διαβάζεται ως σφάλμα δρομολόγησης. Εξάγετε το πιστοποιητικό, επιβεβαιώστε ότι το ιδιωτικό κλειδί είναι αναγνώσιμο εκεί που το περιμένει ο δαίμονας και ελέγξτε ότι το ζεύγος πραγματικά ταιριάζει.
openssl x509 -in vpn.crt -noout -subject -ext subjectAltName
openssl pkey -in vpn.key -check -noout
openssl x509 -in vpn.crt -noout -pubkey | openssl sha256
openssl pkey -in vpn.key -pubout | openssl sha256
Οι δύο τελευταίες συνόψεις πρέπει να είναι ίδιες. Αν δεν είναι, ο δαίμονας ολοκληρώνει τη ρύθμιση και μετά αποτυγχάνει σε κάθε προσπάθεια με σφάλμα πιστοποιητικού ή υπογραφής που δεν δείχνει πουθενά κοντά στην πραγματική αιτία. Το αντίστοιχο του WireGuard είναι συντομότερο, γιατί το δημόσιο κλειδί παράγεται απευθείας από το ιδιωτικό: wg pubkey < /etc/wireguard/wg0.key πρέπει να εκτυπώσει το κλειδί του ομοτίμου που ο διακομιστής σας έχει ήδη αποθηκευμένο.
Τα δικαιώματα ανήκουν στην ίδια απογραφή. stat -c '%a %U:%G' /etc/wireguard/wg0.key θα πρέπει να επιστρέφει 600 root:root, και οτιδήποτε είναι αναγνώσιμο από ομάδα ή από όλους σημαίνει ότι το κλειδί ήταν ήδη διαθέσιμο σε διεργασίες που δεν είχατε ποτέ σκεφτεί.
Ελέγξτε την αποθήκη και τη διαδρομή χρήσης
Η επαλήθευση έχει τρία μέρη, και το τρίτο είναι αυτό που παραλείπεται. Επιβεβαιώστε ότι το κλειδί υπάρχει στην αποθήκη που επιλέξατε, επιβεβαιώστε ότι ο δαίμονας φόρτωσε αυτό το κλειδί και όχι ένα εναπομείναν αντίγραφο, και μετά επιβεβαιώστε ότι εξακολουθεί να ξεκινά όταν το τεχνούργημα εξαγωγής έχει φύγει.
certutil -store -user My
certutil -csp "Microsoft Platform Crypto Provider" -key -user
certutil -verifykeys -user My
ipsec listcerts
Στα Windows η πρώτη εντολή απαριθμεί το προσωπικό αποθετήριο και εκτυπώνει τον πάροχο κλειδιού δίπλα σε κάθε καταχώριση, και εκεί εμφανίζεται ένα πιστοποιητικό που φαίνεται υποστηριζόμενο από υλικό αλλά βρίσκεται στον πάροχο λογισμικού. Η δεύτερη απαριθμεί κλειδιά που κρατά ο πάροχος κρυπτογραφίας της πλατφόρμας, οπότε μια ταυτότητα VPN που λείπει εκεί ενώ το πιστοποιητικό είναι παρόν σημαίνει ότι το ιδιωτικό μισό ζει αλλού. Σε πύλη Linux, το ipsec listcerts αναφέρει τι φόρτωσε το strongSwan, συμπεριλαμβανομένων κλειδιών από το πρόσθετο TPM. Συγκρίνετε αποτυπώματα ή κατακερματισμούς δημόσιου κλειδιού με την απογραφή αντί να εμπιστεύεστε τον αριθμό καταχωρίσεων.
Το αρνητικό τεστ είναι αυτό που αποδεικνύει το σχέδιο. Μετακινήστε το εξαγόμενο κλειδί έξω από τον κατάλογο ρυθμίσεων του δαίμονα, επανεκκινήστε την υπηρεσία και διαβάστε στο αρχείο καταγραφής ποια ταυτότητα παρουσιάζει. Μια σήραγγα που ανεβαίνει παρ' όλα αυτά χρησιμοποιεί την αποθήκη· μια αποτυχημένη εκκίνηση σημαίνει ότι το σχέδιο έτρεχε πραγματικά σε αντίγραφο.
Γράψτε την ανανέωση και την επαναφορά
Η επαναφορά διαφέρει έντονα μεταξύ των δύο οικογενειών, και αυτή η διαφορά ανήκει στη σημείωση σχεδίασης, όχι σε κλήση περιστατικού. Ένα κλειδί σε αρχείο μπορεί να αποθηκευτεί κρυπτογραφημένο και να επαναφερθεί, άρα μια αποτυχημένη μετανάστευση είναι αναστρέψιμη. Ένα μη εξαγώγιμο κλειδί δεν μπορεί να αποθηκευτεί καθόλου, γεγονός που κάνει την επανέκδοση και την επανεγγραφή τη μόνη διαδρομή ανάκτησης όταν η συσκευή πεθαίνει.
Ελέγξτε τη λήξη πριν γίνει διακοπή: openssl x509 -in vpn.crt -noout -checkend 2592000 τερματίζει με μη μηδενικό κώδικα όταν το πιστοποιητικό λήγει εντός τριάντα ημερών, οπότε μπαίνει απευθείας σε έλεγχο παρακολούθησης. Μια εβδομαδιαία εκτέλεση αυτής της γραμμής πιάνει την ανανέωση που δεν είχε προγραμματίσει κανείς.
Η αφαίρεση γίνεται στον διακομιστή: διαγράψτε το ομότιμο ή ανακαλέστε τον σειριακό αριθμό και μετά επιβεβαιώστε ότι η σήραγγα αποτυγχάνει, αφού ένας πελάτης με προσωρινή συνεδρία μπορεί να κρύψει για λίγο μια μισοτελειωμένη ανάκληση. Η ανάκληση πρέπει να φτάσει και στη διαδρομή CRL ή OCSP του συγκεντρωτή, όχι μόνο στη βάση δεδομένων της CA. Ένα πιστοποιητικό είναι δημόσιο έγγραφο, και το προφίλ RFC 5280 καλύπτει πώς επικυρώνεται· τίποτα από αυτή την επικύρωση δεν προστατεύει ένα ιδιωτικό κλειδί που αντιγράφηκε πριν από την περιστροφή.
Γράψτε την απόφαση σε ένα σημείο: ποια αποθήκη κρατά το κλειδί, ποια διεργασία μπορεί να το χρησιμοποιήσει, ποιος μπορεί να το επανεκδώσει και ποια είναι η επαναφορά. Αυτή η παράγραφος είναι ό,τι ζητούν οι ελεγκτές, και ό,τι επιβιώνει από αλλαγή προσωπικού.