Πώς το OpenVPN επιλύει το πιστοποιητικό και το κλειδί: ενσωματωμένο PEM ή διαδρομή
Η ίδια οδηγία μεταφέρει είτε μια διαδρομή αρχείου είτε ένα ενσωματωμένο αντικείμενο PEM. Διαβάστε ποια από τις δύο χρησιμοποιεί το φορτωμένο προφίλ πριν μετακινήσετε πιστοποιητικά οπουδήποτε.
Το μήνυμα λέει ότι το OpenVPN δεν μπορεί να φορτώσει ένα ενσωματωμένο πιστοποιητικό, ενώ το όνομα αρχείου που έχετε στο μυαλό σας λέει το αντίθετο. Αυτό που έλαβε ο αναλυτής μετράει περισσότερο από αυτό που περιέχει το σύστημα αρχείων, επειδή η οδηγία cert δέχεται δύο εντελώς διαφορετικά είδη τιμής. Το ένα είναι μια διαδρομή που ανοίγει· το άλλο είναι κείμενο PEM που έφτασε μέσα στη διαμόρφωση. Μέχρι να μάθετε ποια μορφή έλαβε ο πελάτης που εκτελείται, κάθε διόρθωση είναι εικασία.
Δύο μορφές αποθήκευσης, μία οδηγία
Οι οδηγίες cert, key και ca δέχονται καθεμία μια διαδρομή ή ένα ενσωματωμένο μπλοκ. Όταν η τιμή είναι διαδρομή, το OpenVPN ανοίγει αυτό το αρχείο και διαβάζει το αντικείμενο από τον δίσκο. Όταν η διαμόρφωση περιέχει μπλοκ που οριοθετείται από ετικέτες cert, η ίδια οδηγία καταναλώνει αντ' αυτού το περιεχόμενο ανάμεσα σε αυτές τις ετικέτες, και δεν εμπλέκεται χωριστό αρχείο.
Και οι δύο μορφές παράγουν στο τέλος το ίδιο είδος αντικειμένου, γι' αυτό μια λειτουργική εγκατάσταση μπορεί να περνά από τη μία στην άλλη χωρίς καμία άλλη αλλαγή. Ένα προφίλ που μεταφέρει ενσωματωμένο πιστοποιητικό πελάτη και ιδιωτικό κλειδί είναι αυτάρκες, και η αντιγραφή του σε άλλο μηχάνημα λειτουργεί χωρίς να αντιγραφεί και κατάλογος πιστοποιητικών.
Το αντίστροφο δεν ισχύει. Το να αφήσετε το client.crt δίπλα σε ένα προφίλ που ενσωματώνει τα δικά του δεδομένα δεν αλλάζει τίποτα, επειδή τίποτα στη διαμόρφωση δεν αναφέρεται σε αυτό το αρχείο. Αυτός είναι ο πιο συνηθισμένος λόγος για τον οποίο ένα αρχείο που υπάρχει προφανώς μοιάζει να αγνοείται.
Πώς ένα ενσωματωμένο μπλοκ γίνεται αντικείμενο
Το ενσωματωμένο περιεχόμενο εξάγεται από τη διαμόρφωση και παραδίδεται στον αναλυτή PEM ως κείμενο. Αυτός ο αναλυτής περιμένει τα συνήθη όρια: μια γραμμή BEGIN, ωφέλιμο φορτίο base64 και μια αντίστοιχη γραμμή END. Αν το μπλοκ κόπηκε από αποτυχημένη αντιγραφή, τυλίχτηκε σε HTML από σελίδα λήψης ή άνοιξε σε επεξεργαστή που κανονικοποίησε τις παύλες, ο αναλυτής αποτυγχάνει σε περιεχόμενο που μοιάζει παρόν.
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
Γι' αυτό και η διατύπωση του σφάλματος είναι παραπλανητική. Η λέξη ενσωματωμένο περιγράφει πού κοίταξε ο φορτωτής, όχι τι βρήκε εκεί. Ένα αρχείο που ονομάζεται σε μια διαμόρφωση και ένα αντικείμενο ενσωματωμένο σε αυτήν μπορούν να παράγουν την ίδια διαμαρτυρία όταν τα υποκείμενα byte είναι άχρηστα.
Ελέγξτε ποια μορφή χρησιμοποιεί πραγματικά το φορτωμένο προφίλ, όχι ποιο αρχείο έτυχε να ανοίξει ο επεξεργαστής σας:
grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn
Πώς επιλύεται μια αναφορά διαδρομής
Μια τιμή διαδρομής ανοίγει σε σχέση με τον κατάλογο εργασίας του πελάτη, όχι με τον κατάλογο που περιέχει τη διαμόρφωση. Στο systemd αυτός ο κατάλογος εργασίας είναι ό,τι ορίζει η μονάδα, και μια διαδραστική εκτέλεση από το κέλυφός σας κληρονομεί κάτι εντελώς διαφορετικό. Γι' αυτό το ίδιο αρχείο διαμόρφωσης μπορεί να λειτουργεί όταν το δοκιμάζετε με το χέρι και να αποτυγχάνει ως υπηρεσία.
Οι σχετικές διαδρομές κληρονομούν την ίδια ασάφεια. Όταν βλέπετε ένα γυμνό όνομα αρχείου, ρωτήστε ποιος είναι ο τρέχων κατάλογος της διεργασίας στην παραγωγή αντί να υποθέσετε ότι ταιριάζει με το τερματικό σας.
Για ένα πιστοποιητικό που αποθηκεύεται χωριστά, μια ανάλυση εκτός σύνδεσης επιβεβαιώνει το αντικείμενο πριν διορθώσετε οτιδήποτε πάνω από αυτό:
openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check
Αυτές οι εντολές αποδεικνύουν ότι τα αρχεία είναι αναγνώσιμα και δομικά έγκυρα. Δεν αποδεικνύουν ότι ο ομότιμος εμπιστεύεται τον εκδότη, ότι το πιστοποιητικό βρίσκεται ακόμα μέσα στο παράθυρο ισχύος του ή ότι το κλειδί ανήκει σε αυτό.
Τι μπορεί και τι δεν μπορεί να σας πει το σφάλμα του αναλυτή
Μια αποτυχία ανάλυσης εντοπίζει το πρόβλημα σε μία είσοδο και ένα στάδιο. Δεν σας λέει ποια από τις δύο μορφές αποθήκευσης χρησιμοποίησε ο πελάτης, ούτε αν το αντικείμενο θα είχε γίνει δεκτό. Αυτά είναι ξεχωριστά ερωτήματα με ξεχωριστά στοιχεία.
Μόλις η ανάλυση πετύχει, η επόμενη αποτυχία ανήκει σε μεταγενέστερο στάδιο. Μια απόρριψη εμπιστοσύνης, μια αναντιστοιχία σκοπού ή μια αναντιστοιχία κλειδιού αναφέρεται από τον ομότιμο ή από το επίπεδο TLS, όχι από τον φορτωτή. Η επανειλημμένη αντικατάσταση του ίδιου αρχείου δεν θα μετακινήσει αυτό το σφάλμα.
Κρατήστε το ευαίσθητο μισό έξω από δημόσιες αναφορές όσο ερευνάτε. Μοιραστείτε τα ονόματα των οδηγιών, το κείμενο του σφάλματος και τη δομή του μπλοκ, με το υλικό κλειδιού και οποιοδήποτε αναγνωριστικό ωφέλιμο φορτίο αφαιρεμένα. Το εγχειρίδιο openvpn(8) τεκμηριώνει και τις δύο μορφές των οδηγιών αρχείου και τη συμπεριφορά του καταλόγου εργασίας πίσω από αυτές.