Anda menyimpan sambungan ke 10.20.4.15, VPN terputus, dan klien masih bersambung. Itu bukan berita baik. Alamat peribadi ialah lokasi dalam mana-mana konteks penghalaan anda berada, dan banyak rangkaian menggunakan julat yang sama. Klien telah mencapai pelayan MySQL, cuma mungkin bukan milik anda.

Pembaikan mempunyai dua separuh, dan hanya satu daripadanya tentang rangkaian. Kekalkan sambungan pada laluan yang dimaksudkan, dan buat klien mengesahkan pelayan yang ia hubungi. Separuh pertama ialah tempat VPN membantu; separuh kedua mesti dikonfigurasikan.

Disulitkan kepada apa, sebenarnya?

TLS melindungi perbualan daripada sesiapa di tengah, dan tidak berkata apa-apa tentang siapa titik akhir mendakwa dirinya melainkan klien menyemaknya. Sijil yang disahkan terhadap pihak berkuasa yang dipercayai membuktikan sijil itu datang daripada pihak berkuasa tersebut. Ia tidak membuktikan sijil dikeluarkan untuk nama hos yang anda mahu capai, dan itu soalan yang berbeza.

Ini bukan jurang teori. Portal captive, kesilapan VRF yang salah dan pelan alamat bertindih semuanya menghasilkan pelayan yang benar-benar bersedia berunding TLS dengan anda. Jika klien hanya memerlukan penyulitan, sesi itu peribadi dan ditujukan kepada pangkalan data yang salah.

Jadi soalan yang berkaitan bukanlah sama ada sambungan disulitkan, tetapi sama ada ia disulitkan kepada identiti yang anda maksudkan. Dalam klien MySQL, perbezaan itu hidup sepenuhnya dalam tetapan ssl-mode.

Lima nilai ssl-mode dalam amalan

Terdapat lima nilai, dan hanya satu daripadanya menjawab soalan buku panduan ini. Jadual menyenaraikan apa yang sebenarnya dijamin oleh setiap satu, bukan apa yang namanya cadangkan.

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

Hanya baris terakhir menjawab soalan dalam artikel ini. PREFERRED wajar ditonjolkan sendiri, kerana klien yang jatuh senyap ke teks biasa lebih teruk daripada yang menolak: anda percaya anda mempunyai penyulitan dan tangkapan paket tidak bersetuju.

Sambungan yang boleh anda jalankan hari ini

Perintah di bawah ialah bentuk yang perlu digunakan, dengan dua pemegang tempat: nama pangkalan data yang diluluskan dan fail CA yang diperoleh melalui saluran yang diluluskan. Kedua-duanya tidak boleh diambil daripada apa yang pelayan tawarkan pada sentuhan pertama.

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

--password tanpa nilai meminta input, yang menyimpan rahsia di luar senarai proses dan di luar sejarah shell anda. Itu tabiat kecil dengan hasil besar pada hos lompat yang dikongsi, tempat baris perintah kelihatan kepada pengguna lain.

Apabila ini gagal, teks ralat membezakan kes lebih baik daripada gerak hati. Kegagalan CA bermaksud rantai tidak disahkan dan anda harus melihat CA mana yang menandatangani sijil pelayan. Kegagalan nama hos bermaksud rantai itu baik dan nama tidak sepadan, yang biasanya bermaksud anda bersambung ke pelayan yang betul dengan nama yang salah, bukan ke pelayan yang salah.

Kemunculan gesaan bukan bukti kata laluan sudah dihantar, dan sambungan yang gagal tidak membuktikan tiada apa-apa keluar daripada klien. Jika anda membina semula peristiwa lalu, kenal pasti klien, konfigurasinya, pemalam pengesahan dan peringkat yang gagal. Menganggar pendedahan daripada mesej ralat terakhir ialah tekaan.

Apabila nama datang dari terowong

Pemajuan port tempatan memecahkan pemeriksaan identiti dengan cara yang mengejutkan orang. Jika anda memajukan port tempatan ke pangkalan data dan bersambung ke localhost, klien mengesahkan sijil terhadap localhost, dan tiada sijil dikeluarkan untuk nama itu. Sambungan mungkin selamat sepenuhnya dan pengesahan tetap akan gagal, iaitu pemeriksaan yang berfungsi seperti yang dimaksudkan.

Terdapat dua jawapan jujur. Beri titik akhir yang dimajukan nama yang menyelesaikan ke alamat loopback dan muncul dalam sijil pelayan, atau gunakan nama hos dari hujung ke hujung supaya klien mengesahkan identiti sebenar. Yang pertama mudah untuk pembangun dan memerlukan kerja sijil; yang kedua lebih mudah difikirkan dan selalunya lalai yang betul untuk automasi. Mematikan pengesahan supaya pemajuan berfungsi membuang sifat yang anda cuba tambah.

Penerimaan ialah tiga syarat

Tulis ujian penerimaan sebagai tiga kenyataan berasingan: sambungan menggunakan laluan yang dimaksudkan, penyulitan diwajibkan bukan diutamakan, dan identiti pelayan disahkan terhadap bahan yang dipercayai. Ikon VPN hijau tidak menetapkan mana-mana daripadanya.

Untuk klien GUI dan untuk MariaDB, semak dokumentasi vendor itu sendiri dan bukannya menganggap ejaan bendera terbawa. Dokumentasi sambungan tersulit MySQL merangkumi perbezaan antara mod dan keperluan pengedaran CA, dan itulah rujukan yang perlu disemak sebelum anda menukar rentetan sambungan pengeluaran.

Artikel berkaitan