Anda menyimpan koneksi ke 10.20.4.15, VPN terputus, dan klien tetap terhubung. Itu bukan kabar baik. Alamat privat adalah lokasi di dalam konteks perutean apa pun Anda berada, dan banyak jaringan memakai rentang yang sama. Klien mencapai server MySQL, hanya mungkin bukan milik Anda.

Perbaikannya punya dua bagian, dan hanya satu yang soal jaringan. Jaga koneksi pada jalur yang dimaksud, dan buat klien mengautentikasi server yang diajak bicara. Bagian pertama adalah tempat VPN membantu; bagian kedua harus dikonfigurasi.

Dienkripsi ke apa, tepatnya?

TLS melindungi percakapan dari siapa pun di tengah, dan tidak mengatakan apa pun tentang siapa yang diklaim endpoint kecuali klien memeriksanya. Sertifikat yang tervalidasi terhadap otoritas tepercaya membuktikan sertifikat itu berasal dari otoritas tersebut. Itu tidak membuktikan sertifikat diterbitkan untuk nama host yang ingin Anda capai, dan itu pertanyaan yang berbeda.

Ini bukan celah teoretis. Portal captive, kesalahan VRF yang salah, dan rencana alamat yang tumpang tindih semuanya menghasilkan server yang sepenuhnya bersedia bernegosiasi TLS dengan Anda. Jika klien hanya mensyaratkan enkripsi, sesinya privat dan mengarah ke basis data yang salah.

Jadi pertanyaan yang relevan bukanlah apakah koneksinya terenkripsi, melainkan apakah koneksi itu terenkripsi ke identitas yang Anda maksud. Di klien MySQL, perbedaan itu sepenuhnya hidup di pengaturan ssl-mode.

Lima nilai ssl-mode dalam praktik

Ada lima nilai, dan hanya satu yang menjawab pertanyaan buku panduan ini. Tabel mencantumkan apa yang sebenarnya dijamin masing-masing, bukan apa yang disiratkan namanya.

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 yang menjawab pertanyaan dalam artikel ini. PREFERRED layak disorot tersendiri, karena klien yang diam-diam turun ke teks polos lebih buruk daripada yang menolak: Anda yakin punya enkripsi dan tangkapan paket tidak setuju.

Koneksi yang bisa Anda jalankan hari ini

Perintah di bawah adalah bentuk yang digunakan, dengan dua placeholder: nama basis data yang disetujui dan file CA yang diperoleh melalui saluran yang disetujui. Keduanya tidak boleh diambil dari apa pun yang ditawarkan server pada kontak pertama.

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

--password tanpa nilai meminta masukan, yang menjaga rahasia dari daftar proses dan dari riwayat shell Anda. Itu kebiasaan kecil dengan hasil besar pada host lompat bersama, tempat baris perintah terlihat oleh pengguna lain.

Ketika ini gagal, teks kesalahan membedakan kasus lebih baik daripada intuisi. Kegagalan CA berarti rantai tidak tervalidasi dan Anda harus melihat CA mana yang menandatangani sertifikat server. Kegagalan nama host berarti rantainya baik dan namanya tidak cocok, yang biasanya berarti Anda terhubung ke server yang benar dengan nama yang salah, bukan ke server yang salah.

Munculnya prompt bukan bukti kata sandi sudah terkirim, dan koneksi yang gagal tidak membuktikan tidak ada yang keluar dari klien. Jika Anda merekonstruksi peristiwa masa lalu, identifikasi klien, konfigurasinya, plugin autentikasi, dan tahap yang gagal. Memperkirakan paparan dari pesan kesalahan terakhir adalah tebakan.

Ketika namanya datang dari terowongan

Penerusan port lokal merusak pemeriksaan identitas dengan cara yang mengejutkan orang. Jika Anda meneruskan port lokal ke basis data dan terhubung ke localhost, klien memvalidasi sertifikat terhadap localhost, dan tidak ada sertifikat yang diterbitkan untuk nama itu. Koneksinya bisa sepenuhnya aman dan verifikasinya tetap gagal, yang berarti pemeriksaan bekerja sebagaimana mestinya.

Ada dua jawaban jujur. Beri endpoint yang diteruskan sebuah nama yang diselesaikan ke alamat loopback dan muncul di sertifikat server, atau gunakan nama host dari ujung ke ujung agar klien memverifikasi identitas sebenarnya. Yang pertama nyaman bagi pengembang dan memerlukan pekerjaan sertifikat; yang kedua lebih mudah dicerna dan sering menjadi default yang tepat untuk otomatisasi. Menonaktifkan verifikasi agar penerusan berfungsi membuang properti yang ingin Anda tambahkan.

Penerimaan adalah tiga syarat

Tulis tes penerimaan sebagai tiga pernyataan terpisah: koneksi menggunakan jalur yang dimaksud, enkripsi diwajibkan bukan diutamakan, dan identitas server diverifikasi terhadap materi tepercaya. Ikon VPN hijau tidak menetapkan satu pun dari itu.

Untuk klien GUI dan MariaDB, periksa dokumentasi vendor itu sendiri alih-alih menganggap ejaan flag ikut berlaku. Dokumentasi koneksi terenkripsi MySQL mencakup perbedaan mode dan persyaratan distribusi CA, dan itulah rujukan yang harus diperiksa sebelum Anda mengubah string koneksi produksi.

Artikel terkait