MySQL cez VPN: overte server, nie len šifrovanie
Šifrovanie k nesprávnemu hostiteľovi je stále nesprávne. Porovnajte hodnoty ssl-mode a potom spustite pripojenie, ktoré pomenuje zamýšľaný server a dokáže to.
Ukladáte pripojenie k 10.20.4.15, VPN spadne a klient sa napriek tomu pripojí. To nie je dobrá správa. Súkromná adresa je miesto v akomkoľvek smerovacom kontexte, v ktorom sa nachádzate, a mnoho sietí používa rovnaké rozsahy. Klient dosiahol server MySQL, len možno nie ten váš.
Oprava má dve polovice a len jedna z nich je o sieti. Držte pripojenie na zamýšľanej ceste a prinúťte klienta overiť server, s ktorým hovorí. Prvá polovica je tam, kde pomáha VPN; druhú treba nakonfigurovať.
Šifrované k čomu, presne?
TLS chráni rozhovor pred kýmkoľvek v strede a nehovorí nič o tom, kým sa koncový bod vyhlasuje, ak to klient neoverí. Certifikát, ktorý sa overí proti dôveryhodnej autorite, dokazuje, že certifikát pochádza od tej autority. Nedokazuje, že certifikát bol vydaný pre názov hostiteľa, ktorý ste chceli dosiahnuť, a to sú rôzne otázky.
Nie je to teoretická medzera. Captive portály, chyby s nesprávnym VRF a prekrývajúce sa plány adries vytvárajú všetky server, ktorý je úplne ochotný s vami vyjednávať TLS. Ak klient vyžaduje len šifrovanie, relácia je súkromná a mieri do nesprávnej databázy.
Správna otázka teda nie je, či je pripojenie šifrované, ale či je šifrované k identite, ktorú ste zamýšľali. V klientovi MySQL táto odlišnosť žije úplne v nastavení ssl-mode.
Päť hodnôt ssl-mode v praxi
Existuje päť hodnôt a len jedna z nich odpovedá na otázku tejto príručky. Tabuľka uvádza, čo každá skutočne garantuje, nie čo naznačuje jej názov.
| Mode | What it guarantees |
|---|---|
DISABLED | No TLS at all; everything on the wire is readable |
PREFERRED | Tries TLS and falls back to plaintext when the account and server allow it, so it is not a fail-closed requirement |
REQUIRED | Refuses to connect without TLS, and does not validate the certificate |
VERIFY_CA | Validates the server certificate against the configured CA and does not check the hostname |
VERIFY_IDENTITY | Validates the CA and checks that the certificate names the host the client used |
Na otázku v tomto článku odpovedá len posledný riadok. PREFERRED stojí za samostatné spomenutie, pretože klient, ktorý ticho prejde na čistý text, je horší ako ten, ktorý odmietne: veríte, že máte šifrovanie, a zachytávanie paketov nesúhlasí.
Pripojenie, ktoré môžete spustiť dnes
Príkaz nižšie je podoba, ktorú použite, s dvoma zástupnými údajmi: schválený názov databázy a súbor CA získaný schváleným kanálom. Ani jeden by sa nemal brať z toho, čo vám server ponúkne pri prvom kontakte.
mysql --host=db.corp.example --user=app_reader \
--ssl-mode=VERIFY_IDENTITY \
--ssl-ca=/approved/path/ca.pem --password
--password bez hodnoty vyzve na zadanie, čo udrží tajomstvo mimo zoznamu procesov a mimo histórie shellu. Je to malý zvyk s veľkým prínosom na zdieľaných jump hostoch, kde je príkazový riadok viditeľný pre ostatných používateľov.
Keď to zlyhá, text chyby rozlišuje prípady lepšie než intuícia. Zlyhanie CA znamená, že reťazec sa neoveruje, a mali by ste sa pozrieť, ktorá CA podpísala certifikát servera. Zlyhanie názvu hostiteľa znamená, že reťazec je v poriadku a názov nesedí, čo zvyčajne znamená, že ste sa pripojili k správnemu serveru pod nesprávnym názvom, nie k nesprávnemu serveru.
Objavenie výzvy nie je dôkazom, že heslo už bolo prenesené, a neúspešné pripojenie nedokazuje, že z klienta nič neodišlo. Ak rekonštruujete minulú udalosť, identifikujte klienta, jeho konfiguráciu, autentifikačný plugin a fázu, ktorá zlyhala. Odhadovať expozíciu z poslednej chybovej správy je hádanie.
Keď názov prichádza z tunela
Lokálne presmerovanie portu rozbíja kontrolu identity spôsobom, ktorý ľudí prekvapí. Ak presmerujete lokálny port k databáze a pripojíte sa k localhost, klient overí certifikát proti localhost, a pre tento názov nebol vydaný žiadny certifikát. Pripojenie môže byť úplne bezpečné a overenie napriek tomu zlyhá, čo je kontrola fungujúca podľa zámeru.
Existujú dve čestné odpovede. Dajte presmerovanému koncovému bodu názov, ktorý sa prekladá na adresu spätnej slučky a objavuje sa v certifikáte servera, alebo použite názov hostiteľa od začiatku do konca, aby klient overil skutočnú identitu. Prvé je pohodlné pre vývojárov a vyžaduje prácu s certifikátmi; druhé sa ľahšie premýšľa a často je správnym predvoleným nastavením pre automatizáciu. Vypnutie overenia, aby presmerovanie fungovalo, zahadzuje vlastnosť, ktorú ste sa snažili pridať.
Prijatie sú tri podmienky
Napíšte akceptačný test ako tri samostatné tvrdenia: pripojenie použilo zamýšľanú trasu, šifrovanie bolo vyžadované, nie preferované, a identita servera bola overená proti dôveryhodnému materiálu. Zelená ikona VPN neustanovuje ani jedno z nich.
Pri GUI klientoch a pri MariaDB si prejdite vlastnú dokumentáciu dodávateľa, namiesto toho, aby ste predpokladali, že pravopis prepínača sa prenáša. Dokumentácia MySQL o šifrovaných pripojeniach pokrýva rozdiely medzi režimami a požiadavku distribúcie CA a je odkazom, ktorý treba skontrolovať pred zmenou produkčného pripojovacieho reťazca.