OpenVPN tls-ciphersuites έναντι tls-version-min: τι επιβάλλει το καθένα
Μια λίστα σουιτών TLS 1.3 δεν περιορίζει την έκδοση του πρωτοκόλλου, και το show-tls δείχνει μόνο τοπική υποστήριξη. Ελέγξτε την πολιτική, τις σουίτες και τα διαπραγματευμένα αποτελέσματα χωριστά.
Τρία διαφορετικά γεγονότα συμπτύσσονται σε μία γραμμή στις περισσότερες συζητήσεις για OpenVPN και TLS: τι μπορεί να κάνει η έκδοση του πελάτη σας, τι επιτρέπει το προφίλ και τι διαπραγματεύτηκε στην πραγματικότητα η συνεδρία. Μια σύντομη λίστα σουιτών TLS 1.3 απαντά μόνο μισά στη μεσαία ερώτηση και δεν λέει τίποτα για το κατώτατο όριο της έκδοσης του πρωτοκόλλου. Περάστε τους ελέγχους παρακάτω με τη σειρά και σταματήστε στον πρώτο που δεν αντέχει, γιατί κάθε επόμενος έλεγχος προϋποθέτει ότι οι προηγούμενοι έχουν τακτοποιηθεί.
Ελέγξτε την έκδοση πριν διαβάσετε οποιαδήποτε λίστα
Μια οδηγία διαμόρφωσης δεν μπορεί να προσθέσει υποστήριξη πρωτοκόλλου σε ένα δυαδικό αρχείο που δεν τη διαθέτει. Ξεκινήστε από το πανό έκδοσης, που ονομάζει τη μεταγλωττισμένη βιβλιοθήκη κρυπτογράφησης:
openvpn --version
Μια έκδοση 2.6 συνδεδεμένη με OpenSSL δέχεται και το tls-cipher και το tls-ciphersuites. Μια έκδοση με mbed TLS δεν έχει καθόλου επιλογή σουιτών TLS 1.3, και το εγχειρίδιο 2.6 χαρακτηρίζει το tls-ciphersuites ως επιλογή του OpenSSL. Αν ο διακομιστής ξαναχτιστεί με διαφορετικό backend, το ίδιο προφίλ μπορεί να αλλάξει συμπεριφορά χωρίς να αλλάξει ούτε μία γραμμή διαμόρφωσης.
Όσο είστε εδώ, εκτελέστε το openvpn --show-tls και κρατήστε την έξοδο. Είναι το απόθεμα με το οποίο θα συγκρίνετε αργότερα, και είναι φθηνό να το καταγράψετε πριν αρχίσει κάποιος να επεξεργάζεται προφίλ.
Γράψτε το πανό και τη λίστα στο δελτίο αλλαγής, όχι σε παράθυρο συνομιλίας. Όταν δύο άνθρωποι διαφωνούν για το αν ένας πελάτης θα μπορούσε να προσφέρει μια σουίτα σε έξι εβδομάδες, η καταγεγραμμένη έξοδος το λύνει σε μία γραμμή.
Κρατήστε τα όρια έκδοσης χωριστά από τις λίστες κρυπτογράφησης
Στο εγχειρίδιο 2.6 αυτά είναι τρία στοιχεία ελέγχου, όχι ένα:
- Το
tls-cipherορίζει την πολιτική κρυπτογράφησης για TLS 1.2 και παλαιότερα και περνά στη λίστα κρυπτογράφησης του OpenSSL· - Το
tls-ciphersuitesεπιλέγει σουίτες TLS 1.3· - Τα
tls-version-minκαιtls-version-maxοριοθετούν τις εκδόσεις πρωτοκόλλου που μπορεί να χρησιμοποιήσει η σύνδεση.
Άρα μια προσεκτικά κουρεμένη λίστα σουιτών TLS 1.3 δεν αποδεικνύει τίποτα για το ότι μια παλαιότερη έκδοση εξακολουθεί να επιτρέπεται. Αν η απαίτηση είναι «μόνο TLS 1.3», το κατώτατο όριο έκδοσης είναι αυτό που τη στηρίζει, και η λίστα σουιτών απλώς περιορίζει τις επιλογές μέσα σε αυτό το όριο:
tls-version-min 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
Αυτό το ζεύγος κάνει δύο δουλειές. Διαγράφοντας τη μία από τις γραμμές, η άλλη επιβάλλει λιγότερα απ' όσα νομίζετε, και αυτή είναι ακριβώς η αποτυχία που υπάρχει για να πιάσει όλος αυτός ο έλεγχος.
Το κανάλι δεδομένων είναι τέταρτος έλεγχος. Το data-ciphers διαπραγματεύεται τον συμμετρικό κρυπταλγόριθμο μέσα στη σήραγγα, και το αποτέλεσμά του δεν λέει τίποτα για την έκδοση TLS του καναλιού ελέγχου. Το να βλέπετε AES-256-GCM στη σύνοψη της συνεδρίας δεν είναι απόδειξη για TLS 1.3 προς καμία κατεύθυνση.
Διαβάστε το show-tls ως τοπικό απόθεμα
Το --show-tls απαριθμεί τις σουίτες που υποστηρίζει η βιβλιοθήκη κρυπτογράφησης με την οποία είναι συνδεδεμένο αυτό το δυαδικό αρχείο, με σειρά προτίμησης. Δεν είναι αναφορά από την πύλη. Το εγχειρίδιο δηλώνει ρητά ότι η λίστα προέρχεται από την τοπική βιβλιοθήκη, που σημαίνει ότι ένα φορητό με OpenSSL 3.x και ένας δρομολογητής με παλαιότερη έκδοση θα εκτυπώσουν διαφορετικές λίστες ενώ μιλούν στον ίδιο διακομιστή.
| Evidence | What it actually describes |
|---|---|
--show-tls output | Capabilities of this client build and its library |
| Profile directives | What this attempt is allowed to offer |
| Session log line | What this one negotiation selected |
Ας υποθέσουμε ότι ένας πελάτης υποστηρίζει τις σουίτες A, B και C και μία συνεδρία επιλέγει τη B. Αυτό δεν αποδεικνύει τίποτα για το αν ο διακομιστής επιτρέπει την A ή τη C, ούτε για το αν η B είναι η μόνη επιτρεπόμενη επιλογή του. Κρατήστε τις τρεις σειρές χωριστά, και τα περισσότερα μπερδεμένα νήματα για TLS θα λυθούν μόνα τους.
Το απόθεμα αξίζει πάντως να το κρατήσετε. Όταν μια συνεδρία αποτυγχάνει, η σύγκριση της λίστας της βιβλιοθήκης με τη λίστα του προφίλ σάς λέει αν ο πελάτης είχε καμία πιθανότητα να προσφέρει αυτό που ήθελε ο διακομιστής. Δείχνει επίσης αν μια αλλαγή backend αφαίρεσε ήσυχα το TLS_CHACHA20_POLY1305_SHA256 από το σύνολο στο οποίο βασίζονται οι παλαιότεροι πελάτες — το είδος της παλινδρόμησης που εμφανίζεται ως μια χούφτα χρηστών που δεν μπορούν να συνδεθούν ενώ όλοι οι άλλοι δεν προσέχουν τίποτα.
Ρωτήστε την πύλη κάτι που μπορεί να απαντήσει
Αν διαχειρίζεστε την υπηρεσία, επιθεωρήστε την ενεργή διαμόρφωση της τρέχουσας παρουσίας αντί για ένα αρχείο στον δίσκο. Το OpenVPN μπορεί να ξεκίνησε με διαφορετική διαδρομή --config, μπορεί να τραβά include και μπορεί να μην έχει επανεκκινηθεί από την τροποποίηση. Η πολιτική του δαίμονα που τρέχει είναι αυτή που συναντούν οι πελάτες.
Αν δεν το διαχειρίζεστε, ζητήστε από τον πάροχο τις υποστηριζόμενες απαιτήσεις πελατών ή ένα περιορισμένο τεστ αποδοχής. Μια απορριφθείσα προσπάθεια δεν είναι αυτόματα μια απορριφθείσα σουίτα: ένα κατώτατο όριο έκδοσης, έλεγχοι ταυτότητας πιστοποιητικού όπως το remote-cert-tls ή μια ασυμφωνία μεταξύ tls-auth και tls-crypt μπορούν να τερματίσουν την ανταλλαγή πριν η επιλογή σουίτας έχει σημασία. Διαβάστε το σφάλμα του διακομιστή πριν αλλάξετε τη λίστα του πελάτη, γιατί το «handshake failed» καλύπτει τέσσερις διαφορετικές αιτίες και μόνο μία από αυτές είναι ασυμφωνία κρυπταλγόριθμου.
Το να στρέψετε το openssl s_client στη θύρα VPN δεν αναπαράγει ούτε αυτό την ερώτηση. Το κανάλι ελέγχου τρέχει μέσα στην ίδια τη δομή του OpenVPN, οπότε ένας ακατέργαστος έλεγχος TLS δοκιμάζει άλλο πρωτόκολλο σε μια θύρα που περιμένει κάτι άλλο. Οποιοδήποτε συμπέρασμα βγει από αυτό αφορά τον έλεγχο, όχι τη σήραγγα.
Καταγράψτε δύο αποτελέσματα και κρατήστε τα χωριστά
Μια νέα επιτρεπόμενη συνεδρία παράγει μια γραμμή καναλιού ελέγχου που ονομάζει την έκδοση πρωτοκόλλου και τον επιλεγμένο κρυπταλγόριθμο, και μια ξεχωριστή γραμμή καναλιού δεδομένων που ονομάζει τον κρυπταλγόριθμο της σήραγγας. Καταγράψτε και τις δύο με την έκδοση του πελάτη και το όνομα του προφίλ, και σημειώστε ποια παρουσία διακομιστή απάντησε:
openvpn --config office.ovpn --verb 4 2>&1 | tee session.txt
Έπειτα διαβάστε τις δύο γραμμές από εκείνο το αρχείο και όχι από τη μνήμη. Το ζεύγος είναι η απόδειξη· ένα όνομα σουίτας μόνο είναι προτίμηση, και το όριο έκδοσης είναι ξεχωριστή δήλωση για το τι αρνείται ο διακομιστής.
Εκτελέστε τους ελέγχους με αυτή τη σειρά. Επιβεβαιώστε την έκδοση και το backend με το --version. Καταγράψτε το --show-tls πριν αλλάξετε οτιδήποτε. Δηλώστε το απαιτούμενο κατώτατο όριο έκδοσης χωριστά από τη λίστα σουιτών. Επιβεβαιώστε την ενεργή πολιτική της τρέχουσας παρουσίας με τον ιδιοκτήτη της. Παρατηρήστε μία επιτρεπόμενη συνεδρία και, αν το σχέδιο το επιτρέπει, μία απορριφθείσα προσπάθεια παλαιότερης έκδοσης. Καταγράψτε τα αποτελέσματα του καναλιού ελέγχου και του καναλιού δεδομένων ως ξεχωριστά ευρήματα.
Αν ένας απαιτούμενος πελάτης δεν μπορεί να καλύψει ένα νέο ελάχιστο, πάρτε αυτή την απόφαση μετεγκατάστασης ή εξαίρεσης ρητά αντί να χαμηλώσετε ήσυχα έναν άσχετο κανόνα αποδοχής για να φαίνεται ολοκληρωμένη η κυκλοφορία.