Σφάλματα TLS μόνο στο εταιρικό VPN: διορθώστε το σωστό αρχείο εμπιστοσύνης
Ίδιο εργαλείο, ίδιος φορητός, μόνο το VPN σπάει το TLS. Διαβάστε το μήνυμα, βρείτε το πακέτο CA που διαβάζει το εκτελέσιμο και προσθέστε μία ρίζα αντί να απενεργοποιήσετε τους ελέγχους.
Η έκδοση Go, η εγκατάσταση Composer και ο πελάτης Python λειτουργούν όλα στο σπίτι και όλα αποτυγχάνουν μέσα στο εταιρικό VPN. Αυτό το μοτίβο σας μιλά για τη διαδρομή, όχι για την εφαρμογή. Κάτι στη σήραγγα άλλαξε την αλυσίδα πιστοποιητικών που βλέπει η διεργασία σας, ή επανέφερε τη χειραψία πριν φτάσει καθόλου κάποια αλυσίδα. Τα δύο σφάλματα μοιάζουν στο τερματικό και απαιτούν εντελώς διαφορετικές αντιδράσεις.
Τρία μηνύματα, τρεις μηχανισμοί
Το σφάλμα x509 certificate signed by unknown authority σημαίνει ότι χτίστηκε μια αλυσίδα και η ρίζα της λείπει από το αρχείο εμπιστοσύνης που χρησιμοποιεί αυτή η διεργασία. Το σφάλμα self-signed certificate in certificate chain συνήθως σημαίνει ότι ένας μεσολαβητής επιθεώρησης απάντησε με δικό του πιστοποιητικό, που είναι αλυσίδα την οποία το περιβάλλον εκτέλεσής σας δεν αναγνωρίζει. Ένα SSL EOF κατά τη χειραψία σημαίνει ότι η σύνδεση έκλεισε πριν σταλεί οποιοδήποτε χρησιμοποιήσιμο πιστοποιητικό, και αυτό είναι μια ενδιάμεση συσκευή που απορρίπτει το ClientHello, καθόλου πρόβλημα εμπιστοσύνης.
Η προσθήκη σημαίας μη ασφαλούς λειτουργίας εξαφανίζει και τα τρία μηνύματα αφήνοντας την υποκλοπή στη θέση της, και αφαιρεί τον έλεγχο που θα έπιανε έναν πραγματικό επιτιθέμενο.
Βρείτε το πακέτο που διαβάζει πραγματικά η διεργασία
Η εταιρική ρίζα που είναι εγκατεστημένη στο χώρο των Windows διορθώνει προγράμματα περιήγησης και εφαρμογές .NET που συμβουλεύονται το χώρο του συστήματος. Δεν κάνει τίποτα για μια έκδοση που τρέχει μέσα σε container, το οποίο κουβαλά το δικό του πακέτο CA, ούτε για διεργασία Python με certifi ή διεργασία Node με την ενσωματωμένη λίστα της. Η Go διαβάζει τη συλλογή του συστήματος του περιβάλλοντος στο οποίο τρέχει το εκτελέσιμο, δηλαδή το container και όχι τον φορητό. Έτσι ένα μηχάνημα παράγει ταυτόχρονα ένα πρόγραμμα περιήγησης που δουλεύει και ένα εργαλείο μεταγλώττισης που αποτυγχάνει.
Ρωτήστε το εργαλείο αντί να υποθέσετε. Το python3 -c "import ssl; print(ssl.get_default_verify_paths())" εκτυπώνει τα αρχεία που θα συμβουλευτεί η Python, και το node -e "console.log(process.env.NODE_EXTRA_CA_CERTS)" δείχνει αν έχει ήδη οριστεί κάποια παράκαμψη. Για container, εκτελέστε τον ίδιο έλεγχο μέσα στο image, γιατί αυτό είναι το περιβάλλον που χρησιμοποιεί πραγματικά η έκδοση.
Εγκαταστήστε μία ρίζα εκεί όπου τρέχει η έκδοση
Ζητήστε τη ρίζα επιθεώρησης από το τμήμα IT ως αρχείο PEM και επαληθεύστε το αποτύπωμά της από ξεχωριστό κανάλι πριν την εμπιστευτείτε. Σε image βασισμένα στο Debian, αντιγράψτε την στο /usr/local/share/ca-certificates/ και εκτελέστε update-ca-certificates· τα image της οικογένειας RHEL χρησιμοποιούν update-ca-trust αφού τοποθετήσουν το αρχείο στο /etc/pki/ca-trust/source/anchors/. Σε build container, προσθέστε αυτά τα βήματα πριν από την εντολή που αποτυγχάνει, ώστε το επίπεδο να μπει στην προσωρινή μνήμη πάνω από την εγκατάσταση εξαρτήσεων.
Για τοπικό devcontainer, προσαρτήστε το PEM και εκτελείτε την ίδια εντολή ενημέρωσης στην εκκίνηση αντί να τη ψήσετε μέσα σε προσωπικό image που κανείς άλλος δεν μπορεί να αναπαράγει. Τα εργαλεία που φέρνουν δικό τους πακέτο χρειάζονται τη δική τους τεκμηριωμένη παράκαμψη: το pip έχει ρύθμιση πιστοποιητικού, το npm έχει ρύθμιση cafile, και τα περισσότερα άλλα δέχονται τις τυπικές μεταβλητές περιβάλλοντος.
Αυτό δεν είναι το ίδιο με το να δέχεστε οποιοδήποτε πιστοποιητικό. Προσθέτετε μία συγκεκριμένη ρίζα, που λάβατε από τον φορέα που κάνει την επιθεώρηση, σε ένα περιβάλλον, και η επαλήθευση παραμένει ενεργή για κάθε άλλη αλυσίδα. Καταγράψτε ποιο αρχείο προστέθηκε και πότε λήγει, αφού η ρίζα επιθεώρησης ανανεώνεται όπως κάθε άλλη CA.
Όταν η χειραψία πεθαίνει πριν από ένα πιστοποιητικό
Αν δεν παρουσιαστεί τίποτα, καμία αλλαγή στο αρχείο εμπιστοσύνης δεν θα βοηθήσει. Συγκρίνετε το ίδιο αίτημα με τη σήραγγα ανοιχτή και κλειστή, και μετά εξετάστε την αλυσίδα απευθείας με openssl s_client -connect host:443 -servername host -showcerts. Μια σύνδεση που ολοκληρώνεται εκτός VPN και επανέρχεται εντός της είναι απόφαση πολιτικής της ενδιάμεσης συσκευής, και το γιατρικό είναι εξαίρεση για αυτόν τον κεντρικό υπολογιστή και όχι άλλο πιστοποιητικό. Ζητήστε το μητρώο πακέτων ή το τελικό σημείο API να περνά αναλλοίωτο.
Το να χωρίσετε τη σήραγγα ώστε το εργαλείο να παρακάμπτει το VPN αποφεύγει την επιθεώρηση για αυτή την κίνηση, κάτι που μπορεί να παραβιάζει την πολιτική και δεν κάνει το εργαλείο αξιόπιστο.
Καταγράψτε το αποτέλεσμα ανά εργαλείο
Μια σύντομη σημείωση που απαριθμεί το εκτελέσιμο, το αρχείο εμπιστοσύνης που διαβάζει, τη μεταβλητή περιβάλλοντος που παίζει ρόλο και την εγκεκριμένη εξαίρεση γλιτώνει από τον επόμενο άνθρωπο όλη τη διάγνωση. Κρατήστε τη σημείωση ανά εργαλείο και όχι ανά φορητό, γιατί ο φορητός σπάνια είναι αυτό που άλλαξε.
Και κρατήστε δύο προτάσεις χωριστά στο δελτίο: εγκαταστήσαμε μια συγκεκριμένη εταιρική ρίζα και απενεργοποιήσαμε την επαλήθευση. Μόνο μία από τις δύο είναι ενέργεια υποστήριξης.