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

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

Κρυπτογραφημένη προς τι, ακριβώς;

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

Αυτό δεν είναι θεωρητικό κενό. Οι πύλες captive, τα λάθη με λάθος VRF και τα επικαλυπτόμενα σχέδια διευθύνσεων όλα παράγουν έναν διακομιστή που είναι απολύτως πρόθυμος να διαπραγματευτεί TLS μαζί σας. Αν ο πελάτης απαιτεί μόνο κρυπτογράφηση, η συνεδρία είναι ιδιωτική και στραμμένη στη λάθος βάση δεδομένων.

Άρα το σχετικό ερώτημα δεν είναι αν η σύνδεση είναι κρυπτογραφημένη, αλλά αν είναι κρυπτογραφημένη προς την ταυτότητα που σκοπεύατε. Στον πελάτη του MySQL, αυτή η διάκριση ζει εξ ολοκλήρου στη ρύθμιση ssl-mode.

Οι πέντε τιμές ssl-mode στην πράξη

Υπάρχουν πέντε τιμές και μόνο μία από αυτές απαντά στο ερώτημα αυτού του εγχειριδίου. Ο πίνακας απαριθμεί τι εγγυάται στην πραγματικότητα η καθεμία, όχι τι υποδηλώνει το όνομά της.

ModeWhat it guarantees
DISABLEDNo TLS at all; everything on the wire is readable
PREFERREDTries TLS and falls back to plaintext when the account and server allow it, so it is not a fail-closed requirement
REQUIREDRefuses to connect without TLS, and does not validate the certificate
VERIFY_CAValidates the server certificate against the configured CA and does not check the hostname
VERIFY_IDENTITYValidates the CA and checks that the certificate names the host the client used

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

Μια σύνδεση που μπορείτε να εκτελέσετε σήμερα

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

mysql --host=db.corp.example --user=app_reader \
  --ssl-mode=VERIFY_IDENTITY \
  --ssl-ca=/approved/path/ca.pem --password

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

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

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

Όταν το όνομα έρχεται από σήραγγα

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

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

Η αποδοχή είναι τρεις προϋποθέσεις

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

Για πελάτες GUI και για το MariaDB, ελέγξτε την τεκμηρίωση του ίδιου του κατασκευαστή αντί να υποθέσετε ότι η ορθογραφία της σημαίας μεταφέρεται. Η τεκμηρίωση του MySQL για κρυπτογραφημένες συνδέσεις καλύπτει τις διαφορές των λειτουργιών και την απαίτηση διανομής CA, και είναι η αναφορά που πρέπει να ελέγξετε πριν αλλάξετε μια συμβολοσειρά σύνδεσης παραγωγής.

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