Ο σκοπός του πιστοποιητικού διακομιστή φαίνεται σωστός, το κλειδί ταιριάζει, οι ημερομηνίες είναι εντάξει, και η σύνδεση εξακολουθεί να αποτυγχάνει με unsupported certificate purpose. Η λεπτομέρεια που το λύνει βρίσκεται συνήθως στην ίδια γραμμή με το σφάλμα: μια τιμή βάθους και ένα subject που ονομάζουν πιστοποιητικό ψηλότερα στην αλυσίδα. Εκτελούνται δύο διαφορετικοί έλεγχοι, και μόνο ο ένας αφορά το τελικό πιστοποιητικό. Η σύγκρισή τους εξηγεί γιατί η αντικατάσταση του πιστοποιητικού διακομιστή δεν αλλάζει τίποτα.

Ποιο πιστοποιητικό απέρριψε πραγματικά ο επαληθευτής

Μια αλυσίδα δεν είναι ένα αντικείμενο επαναλαμβανόμενο τρεις φορές. Το τελικό πιστοποιητικό φέρει το όνομα και το κλειδί του διακομιστή, τα ενδιάμεσα το συνδέουν με μια ρίζα, και το καθένα έχει τη δική του περίοδο ισχύος, περιορισμούς και χρήσεις. Όταν το σφάλμα αναφέρει βάθος, ο αριθμός αυτός προσδιορίζει μια θέση στην αλυσίδα που έχτισε ο επαληθευτής, και μπορεί να μην είναι η θέση που περιμένετε αν ο διακομιστής στέλνει απρόσμενη αλυσίδα.

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

openssl x509 -in issuing-ca.pem -noout -subject -issuer -ext basicConstraints -ext extendedKeyUsage

Αν το πιστοποιητικό που ονομάζεται είναι ενδιάμεσο του οποίου η εκτεταμένη χρήση κλειδιού αναφέρει κάτι άσχετο με την πιστοποίηση διακομιστή TLS, η υπόλοιπη αποτυχία ακολουθεί μηχανικά. Η αλυσίδα δεν μπορεί να χρησιμοποιηθεί για τον σκοπό που ζήτησε OpenVPN.

Ο σκοπός του τελικού πιστοποιητικού και η πολιτική της αλυσίδας είναι δύο έλεγχοι

Ο έλεγχος του τελικού πιστοποιητικού θέτει ένα στενό ερώτημα: επιτρέπει αυτό το πιστοποιητικό τελικής οντότητας την πιστοποίηση διακομιστή για αυτό το όνομα; Ο έλεγχος της αλυσίδας θέτει ένα ευρύτερο: επιτρέπεται σε κάθε πιστοποιητικό της διαδρομής να εξυπηρετεί αυτόν τον σκοπό; Μια αρχή πιστοποίησης που επιτρέπεται να εκδίδει μόνο πιστοποιητικά πελάτη θα περάσει τους δικούς της ελέγχους υπογραφής και παρ' όλα αυτά θα αποτύχει στον δεύτερο έλεγχο, γιατί η διαδρομή που εξουσιοδοτεί δεν περιλαμβάνει τον σκοπό που χρειάζεται η εφαρμογή. Και οι δύο έλεγχοι αποτυγχάνουν με τις ίδιες λέξεις και έχουν εντελώς διαφορετικές διορθώσεις.

Γι' αυτό ένα φρεσκοεκδοθέν τελικό πιστοποιητικό, σωστό σε κάθε ορατό πεδίο, μπορεί να αποτύχει αμέσως. Γι' αυτό επίσης η διόρθωση ανήκει συνήθως στο προφίλ της εκδίδουσας αρχής και όχι στη διαμόρφωση του VPN.

Ένα απόν EKU δεν είναι περιοριστικό EKU

Το RFC 5280 κάνει την επέκταση εκτεταμένης χρήσης κλειδιού προαιρετική και, όταν υπάρχει, περιοριστική. Ένα πιστοποιητικό CA χωρίς την επέκταση επομένως δεν έχει πει «όχι» στην πιστοποίηση διακομιστή, ενώ ένα που απαριθμεί μόνο έναν άσχετο σκοπό έχει πει κάτι πολύ συγκεκριμένο. Η αντιμετώπιση αυτών των δύο καταστάσεων ως ισοδύναμων παράγει λάθος διάγνωση και, χειρότερα, λάθος διόρθωση. Η διάκριση εξηγεί επίσης γιατί δύο αρχές που μοιάζουν σε μια κονσόλα συμπεριφέρονται εντελώς διαφορετικά μέσα σε μια αλυσίδα.

Η συμπεριφορά των βιβλιοθηκών δεν είναι ομοιόμορφη ούτε εδώ. Το έγγραφο του OpenSSL για τις επιλογές επαλήθευσης περιγράφει τη δική του αντιμετώπιση των ελέγχων σκοπού σε πιστοποιητικά CA, και αυτή η αντιμετώπιση είναι πολιτική υλοποίησης και όχι κανόνας που κάθε στοίβα TLS ακολουθεί πανομοιότυπα. Περιγράψτε τι κάνει ο επαληθευτής σας και μετά επιβεβαιώστε το στην έκδοση που εκτελείτε πραγματικά.

Αναπαράγετε την αποτυχία εκτός σύνδεσης πριν επανεκδώσετε

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

openssl verify -purpose sslserver -show_chain -CAfile root-ca.pem -untrusted issuing-ca.pem vpn-server.pem

Το -show_chain μετράει γιατί εκτυπώνει τη διαδρομή που έχτισε το εργαλείο, η οποία συχνά δεν είναι η σειρά αρχείων που δώσατε. Αυτή η έξοδος είναι ο ταχύτερος τρόπος να ανακαλύψετε ότι ένα δεύτερο ενδιάμεσο πιστοποιητικό τραβιέται από έναν χώρο έμπιστων, ότι ο διακομιστής στέλνει μια διασταυρωμένα υπογεγραμμένη παραλλαγή που δεν σκοπεύατε, ή ότι η σημαία σκοπού που αντιγράψατε από έναν οδηγό ανήκει σε διαφορετικό ρόλο από αυτόν που εξυπηρετείται.

Διορθώστε την πολιτική έκδοσης, όχι την κλήση επαλήθευσης

Η διαρκής διόρθωση είναι ένα ενδιάμεσο πιστοποιητικό εκδοθέν υπό πολιτική που επιτρέπει τους σκοπούς που πρέπει να εξυπηρετεί, με τον περιορισμό γραμμένο και ελεγμένο. Το να προσθέτεις κάθε σκοπό σε κάθε αρχή δεν είναι πολιτική· αφαιρεί τον περιορισμό που έδινε νόημα στην επέκταση εξαρχής, και συνήθως επιβιώνει περισσότερο από το περιστατικό που το προκάλεσε. Μια σύντομη σημείωση στο προφίλ που περιγράφει ποιους ρόλους μπορεί να πιστοποιεί η αρχή εμποδίζει την επόμενη επανέκδοση να επαναλάβει την ίδια διαφωνία.

Η απενεργοποίηση της επαλήθευσης είναι η άλλη δελεαστική συντόμευση, και μετατρέπει ένα πρόβλημα πιστοποιητικού σε πρόβλημα εμπιστοσύνης. Κρατήστε τον έλεγχο σκοπού, διορθώστε την αλυσίδα και εκτελέστε ξανά την ίδια επαλήθευση εκτός σύνδεσης για να επιβεβαιώσετε ότι η διαδρομή εξυπηρετεί τώρα τον προβλεπόμενο ρόλο πριν αγγίξετε ξανά την υπηρεσία.

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