Αρχείο DH ή κλειδί tls-auth; Πώς ξεχωρίζουν δύο αρχεία OpenVPN
Το ένα αρχείο κρατά δημόσιες παραμέτρους ομάδας, το άλλο είναι κοινό μυστικό υλικό. Τρεις συνθήκες καθορίζουν σε ποια οδηγία ανήκει το καθένα.
Δύο αρχεία, δύο οδηγίες και η συνήθεια να ονομάζονται και τα δύο από αυτό που ρυθμίζουν. Έτσι το dh.pem καταλήγει σε γραμμή tls-auth και ο πελάτης αποτυγχάνει με μήνυμα για απρόσμενη μορφή κλειδιού. Η απόφαση μπροστά σας δεν είναι ποιο αρχείο είναι ισχυρότερο. Είναι ποιος ρόλος χρειάζεται πραγματικά στην ανάπτυξη, και τρεις συνθήκες το κρίνουν: ποια ανταλλαγή κλειδιών θα διαπραγματευτεί η στοίβα TLS σας, αν θέλετε καθόλου έλεγχο ταυτότητας του καναλιού ελέγχου και αν το υλικό πρέπει να μείνει μυστικό.
Απαντήστε τις με σειρά και το ερώτημα του αρχείου απαντιέται μόνο του. Παραλείψτε τις και τα ονόματα των οδηγιών αρχίζουν να μοιάζουν εναλλάξιμα, που είναι ακριβώς η κατάσταση από την οποία προκύπτει το λάθος.
Διαβάστε την ετικέτα πριν από το όνομα του αρχείου
Η πρώτη γραμμή του αρχείου πληροφορεί περισσότερο από το όνομά του, γιατί το όνομα είναι ανθρώπινη σύμβαση ενώ την ετικέτα την παράγει το εργαλείο. Οι παράμετροι Diffie-Hellman φέρουν ετικέτα PEM BEGIN DH PARAMETERS. Το στατικό κλειδί του OpenVPN είναι εντελώς διαφορετική δομή, με δική του κεφαλίδα και δεκαεξαδικό φορτίο.
Η μετονομασία δεν μετατρέπει τίποτα. Ένα αρχείο παραμέτρων με όνομα ta.key παραμένει παράμετροι, και ένα στατικό κλειδί με όνομα dh.pem παραμένει στατικό κλειδί· ο αναλυτής διαβάζει το περιεχόμενο και απορρίπτει την ασυμφωνία. Ελέγξτε πριν επεξεργαστείτε το προφίλ:
head -n 1 dh.pem
head -n 1 ta.keyΤρεις συνθήκες που καθορίζουν ποιο αρχείο χρειάζεστε
Η πρώτη συνθήκη είναι η ανταλλαγή. Μια χειραψία Diffie-Hellman πεπερασμένου πεδίου χρειάζεται ομάδα, και η οδηγία dh είναι εκεί όπου ο διακομιστής ονομάζει τις παραμέτρους γι' αυτήν. Μια χειραψία ελλειπτικής καμπύλης δεν χρειάζεται καθόλου εκείνο το αρχείο, γιατί η καμπύλη είναι το σύνολο παραμέτρων. Αν ο διακομιστής σας διαπραγματεύεται μόνο σουίτες ECDHE, το αρχείο DH είναι νεκρό βάρος και όχι επιπλέον ισχύς.
Η δεύτερη συνθήκη είναι ο έλεγχος ταυτότητας του καναλιού ελέγχου, ξεχωριστό χαρακτηριστικό με δικό του υλικό. Το αρχείο tls-auth είναι κοινό στατικό κλειδί που κρατούν και οι δύο ομότιμοι, και χρησιμοποιείται για την υπογραφή πακέτων του καναλιού ελέγχου ώστε ένας μη πιστοποιημένος ομότιμος να μην μπορεί καν να ολοκληρώσει τη χειραψία. Υπάρχει είτε χρησιμοποιείτε DH πεπερασμένου πεδίου είτε όχι, και δεν σχετίζεται με τις παραμέτρους της ομάδας.
Η τρίτη συνθήκη είναι η μυστικότητα και η διανομή. Οι παράμετροι DH μπορούν να δημοσιευτούν χωρίς να αποδυναμώσουν τη συνεδρία, γιατί οι μυστικές τιμές παράγονται ανά χειραψία και δεν εγκαταλείπουν ποτέ τους ομότιμους. Ένα στατικό κλειδί δεν πρέπει να δημοσιεύεται: είναι τα ίδια byte και στα δύο άκρα, δεν περιστρέφεται μόνο του, και όποιος το κρατά μπορεί να παράγει έγκυρες υπογραφές του καναλιού ελέγχου. Αυτές οι δύο απαντήσεις οδηγούν σε εντελώς διαφορετικούς κανόνες χειρισμού, γι' αυτό το ένα αρχείο μπορεί να βρίσκεται σε αποθετήριο και το άλλο όχι.
Παράγετε το σωστό υλικό για κάθε ρόλο
Χρησιμοποιήστε το εργαλείο που παράγει τη μορφή που περιμένει η οδηγία αντί να μετατρέπετε μεταξύ τους. Για το κοινό κλειδί στο OpenVPN 2.6, η τυποποιημένη μορφή της γεννήτριας δηλώνει ρητά τον σκοπό.
openvpn --genkey tls-auth ta.keyΑυτή η εντολή δημιουργεί νέο μυστικό υλικό· δεν επισκευάζει ούτε επιθεωρεί υπάρχον κλειδί, και αν την εκτελέσετε ξανά θα πάρετε διαφορετικό κλειδί που οι άλλοι ομότιμοι δεν έχουν. Αντιγράψτε το αρχείο που προκύπτει στους ομότιμους που το χρειάζονται μέσω καναλιού που θα χρησιμοποιούσατε για οποιοδήποτε κοινό μυστικό, και κρατήστε τη σύμβαση κατεύθυνσης σταθερή: με tls-auth η μία πλευρά χρησιμοποιεί key-direction 0 και η άλλη key-direction 1.
Οι παράμετροι DH, όταν τις χρειάζεστε, προέρχονται από παραγωγή παραμέτρων και όχι από γεννήτρια κλειδιών, και η προέλευσή τους μετράει ακόμη και όταν η έξοδος είναι δημόσια. Μια ομάδα παρμένη από άγνωστη πηγή δεν γίνεται αξιόπιστη επειδή είναι δημόσια· πρέπει ακόμη να είναι ομάδα με την οποία συμφωνούν οι ομότιμοί σας και μία που δεν αποδυναμώνεται από το μέγεθος ή την κατασκευή της.
Τι σημαίνει το dh none και τι δεν σημαίνει
Το dh none είναι πραγματική οδηγία με στενή σημασία: δεν θα φορτωθεί αρχείο παραμέτρων πεπερασμένου πεδίου, γιατί η χειραψία χρησιμοποιεί Diffie-Hellman ελλειπτικής καμπύλης. Δεν είναι συντομογραφία για «παράλειψη του βήματος DH» με την έννοια της αποδυνάμωσης, και σίγουρα δεν λέει στο OpenVPN να δεχτεί κάποιο άλλο αρχείο ως υποκατάστατο.
Δύο λάθη προκύπτουν από την κακή ανάγνωσή του. Το πρώτο είναι να υποθέσετε ότι το dh none αφαιρεί την ανάγκη για tls-auth, ενώ τα δύο ελέγχουν διαφορετικά πράγματα. Το δεύτερο είναι να κρατάτε μια παρωχημένη γραμμή dh δίπλα σε διαμόρφωση μόνο καμπύλης και μετά να αναρωτιέστε ποιο αρχείο χρησιμοποιεί στην πραγματικότητα ο διακομιστής· αν η οδηγία υπάρχει, το αρχείο διαβάζεται, και μια σπασμένη διαδρομή εκεί αποτυγχάνει την εκκίνηση για λόγο άσχετο με την ανταλλαγή που θα διαπραγματευτεί.
Αν το λάθος αρχείο έχει ήδη αναπτυχθεί
Επαναφέρετε το προβλεπόμενο μυστικό από τον ιδιοκτήτη του προφίλ και αφήστε την επαλήθευση πιστοποιητικού ήσυχη όσο το κάνετε. Η αποτυχία είναι ασυμφωνία μορφής, όχι αποτυχία εμπιστοσύνης, και η απενεργοποίηση της επαλήθευσης για να περάσετε το σφάλμα αντικαθιστά ένα πρόβλημα εκκίνησης με ένα σιωπηλό.
Έπειτα χωρίστε τα δύο περιστατικά που οι άνθρωποι τείνουν να συγχωνεύουν. Η δημοσίευση αρχείου παραμέτρων DH είναι σχεδόν ακίνδυνη, γιατί οι παράμετροι ήταν δημόσιες εκ σχεδιασμού. Η έκθεση του κλειδιού tls-auth είναι άλλο γεγονός: το κλειδί πιστοποιεί πακέτα του καναλιού ελέγχου για κάθε ομότιμο που το κρατά, άρα η αντικατάσταση πρέπει να συντονιστεί σε όλη την ανάπτυξη και όχι να εφαρμοστεί σε έναν μόνο κεντρικό υπολογιστή.
Ένας έλεγχος πέντε λεπτών κρίνει σε ποια περίπτωση βρίσκεστε: διαβάστε την πρώτη γραμμή κάθε αρχείου, επιβεβαιώστε την οδηγία που το αναφέρει και επιβεβαιώστε ότι η διανομή του αρχείου ταιριάζει με ό,τι απαιτεί το υλικό. Είναι μικρότερη δουλειά από το να ξαναφτιάξετε ένα λειτουργικό PKI, και σε αυτό έδειχναν οι τρεις συνθήκες όλη την ώρα.