Το ConnMan δουλεύει ένα απόγευμα και μετά αρνείται, και η γραμμή του ημερολογίου αναφέρει επαλήθευση πιστοποιητικού. Αυτή η γραμμή στέλνει τον κόσμο σε πακέτα CA που ποτέ δεν ήταν χαλασμένα. Δύο διαφορετικές βλάβες παράγουν σχεδόν την ίδια μορφή αποτυχίας: το cookie της συνεδρίας λήγει ή το πιστοποιητικό του διακομιστή όντως άλλαξε. Διαχωρίζονται σε περίπου ένα λεπτό, και μόνο μία από τις δύο αφορά καθόλου το αποτύπωμα.

Δύο βλάβες, μία μπερδεμένη γραμμή ημερολογίου

Διαχωρίζονται με δύο παρατηρήσεις, και καμία από τις δύο δεν χρειάζεται δεύτερη ανάγνωση. Η πρώτη είναι πότε άρχισε η αποτυχία: ένα ληγμένο cookie φτάνει μετά από ώρες ή ημέρες δουλειάς, και ένα αντικατεστημένο πιστοποιητικό φτάνει αμέσως μετά από αλλαγή πύλης.

SignalExpired cookieChanged certificate
When it startedafter hours or days of workingright after a gateway change
Fingerprint from a fresh authenticateunchangeddifferent value
Usual log tailHTTP CONNECT 401 / unauthorizedsigner not found / verify failed
Repairreplace the cookie, restartre-pin deliberately, then restart

Το τεστ του ενός λεπτού είναι η εκτέλεση authenticate παρακάτω. Συγκρίνετε το FINGERPRINT της με το OpenConnect.ServerCert στο αρχείο. Ίδιο αποτύπωμα με διαφορετικό COOKIE σημαίνει αντικατάσταση μόνο του cookie. Διαφορετικό αποτύπωμα σημαίνει ότι το πιστοποιητικό του διακομιστή άλλαξε πραγματικά, οπότε καρφιτσώστε το ξανά σκόπιμα και καταγράψτε ποιος το ενέκρινε.

Παράγετε το υλικό αντί να το πληκτρολογείτε

Το ConnMan δεν έχει βήμα εισαγωγής για προφίλ OpenConnect, σε αντίθεση με το NetworkManager. Διαβάζει ένα αρχείο παροχής του οποίου οι τιμές πρέπει να παραχθούν εκ των προτέρων, και ο υποστηριζόμενος τρόπος να τις παραγάγετε είναι η λειτουργία authenticate του OpenConnect.

sudo openconnect --csd-wrapper=/home/user/.cisco/csd-wrapper.sh \
  --authenticate --user myuser vpn.example.com

Η έξοδος τυπώνει τέσσερις τιμές: POST, COOKIE, HOST και FINGERPRINT. Το αποτύπωμα, με πρόθεμα sha256:, είναι η καρφίτσα του διακομιστή. Το cookie είναι το τεχνούργημα της συνεδρίας με διάρκεια ζωής που αποφασίζει η πύλη. Αντιμετωπίστε τα ως διαφορετικά είδη μυστικού: λήγουν με διαφορετικά χρονοδιαγράμματα και μόνο ένα αναμένεται να αλλάξει.

Το αρχείο φέρει και τα δύο, και γερνούν διαφορετικά

Το αρχείο παροχής βρίσκεται κάτω από το /var/lib/connman-vpn/ και το διαβάζει ανά σύνδεση ο δαίμονας VPN, όχι η εφαρμογή της δίσκου συστήματος. Κρατήστε το όνομα της σύνδεσης στο καθολικό τμήμα και τις λεπτομέρειες του πρωτοκόλλου στο τμήμα παρόχου.

[global]
Name = Company VPN

[provider_openconnect]
Type = OpenConnect
Name = Company Cisco VPN
Host = vpn.example.com
Domain = corp.example
OpenConnect.ServerCert = sha256:...
OpenConnect.Cookie = ...

Χρησιμοποιήστε το όνομα κεντρικού υπολογιστή που σερβίρει πραγματικά η πύλη. Μια γυμνή διεύθυνση IP μπορεί να περάσει τον έλεγχο πιστοποιητικού και να αποτύχει παρόλα αυτά, επειδή η συσκευή δρομολογεί με βάση τον εικονικό κεντρικό υπολογιστή και περιμένει το όνομα.

systemctl status connman-vpn --no-pager   # is the daemon even installed and running
sudo systemctl restart connman-vpn       # after the file edit
journalctl -u connman-vpn --since '1 hour ago'  # after the connection attempt

Τι δείχνει πραγματικά το ημερολόγιο

Το αναδυόμενο μήνυμα της δίσκου δεν θα σας πει ποια βλάβη έχετε. Το ημερολόγιο θα το πει, αν διαβάσετε την ακολουθία αντί για την πρώτη ανησυχητική γραμμή. Ένα παλιό cookie συνήθως δείχνει ότι η διαπραγμάτευση TLS ολοκληρώθηκε και το επίπεδο HTTP απέρριψε μετά, γι' αυτό οι λέξεις για τα πιστοποιητικά στέκονται δίπλα σε μια αποτυχία εξουσιοδότησης.

Συγκρίνετε μια νέα εκτέλεση authenticate με τις τιμές στο αρχείο. Αν το αποτύπωμα ταιριάζει και διαφέρει μόνο το cookie, έχετε την απάντησή σας χωρίς να αγγίξετε ρυθμίσεις εμπιστοσύνης.

Ανανεώστε το πεδίο που έληξε

Επαναλάβετε την εντολή authenticate, αντικαταστήστε το OpenConnect.Cookie και επανεκκινήστε τον δαίμονα. Αφήστε το αποτύπωμα ήσυχο εκτός αν η νέα έξοδος δείχνει διαφορετική τιμή· σε αυτή την περίπτωση το πιστοποιητικό του διακομιστή αντικαταστάθηκε πραγματικά και το νέο καρφίτσωμα είναι απόφαση που κάποιος πρέπει να καταγράψει, όχι επικόλληση από μήνυμα σφάλματος.

Το να αυτοματοποιήσετε την ανανέωση είναι λογικό: ένα μικρό σενάριο διαβάζει τον κωδικό από την τυπική είσοδο, εκτελεί τη λειτουργία authenticate και ξαναγράφει μόνο τη γραμμή του cookie. Κρατήστε το διαπιστευτήριο έξω από το σενάριο και αναγνώσιμο μόνο από τον λογαριασμό που το εκτελεί, και κάντε την επανεγγραφή ατομική ώστε μια αποτυχημένη εκτέλεση να μην αφήνει μισογραμμένο αρχείο.

Αν η ανανέωση χρειάζεται κάθε λίγες ώρες, γράψτε το διάστημα. Είναι ιδιότητα της πολιτικής συνεδριών της πύλης και αποφασίζει αν θα αυτοματοποιήσετε την ανανέωση ή θα ζητήσετε μεγαλύτερη συνεδρία.

Σχετικά άρθρα