Melihat pesan rahasia tidak valid biasanya memunculkan satu kesimpulan: VPN tidak menyukai tanda baca. Kesimpulan itu biasanya salah, karena pesan sering berasal dari penanganan lokal sebelum gateway mana pun melihat akun. Dua rancangan mengirimkan kata sandi yang sama, sebuah kolom grafis dan sebuah berkas kredensial, dan keduanya gagal di tempat berbeda. Bandingkan wadahnya sebelum menyederhanakan kata sandi yang sejak awal baik-baik saja.

Kesalahan terjadi sebelum gateway

Validasi lokal, penyimpanan rahasia yang terkunci, agen yang hilang, dan berkas kredensial yang cacat semuanya menghasilkan kegagalan yang dialami pengguna sebagai satu penolakan. Tidak satu pun melibatkan server autentikasi. Penolakan dari gateway sendiri adalah peristiwa tersendiri, dan biasanya datang dengan pesan serta waktu yang berbeda. Itu terjadi setelah terowongan ada dan kredensial telah dikirim.

Jadi pertanyaan pertama bukan karakter mana yang sah, melainkan di mana upaya itu berhenti. Klien yang tidak pernah membuka koneksi belum ditolak oleh siapa pun. Catat tahap yang Anda amati, karena setiap langkah berikutnya bergantung pada klasifikasi itu.

Perbedaan itu juga mengubah siapa yang memperbaikinya. Masalah wadah menjadi milik perangkat dan pemiliknya, sedangkan penolakan akun menjadi milik siapa pun yang menjalankan backend autentikasi.

Bandingkan wadahnya, bukan karakternya

Kolom kata sandi grafis, entri keychain, berkas kredensial dua baris, dan rahasia otomatisasi masing-masing membawa nilai yang sama dalam amplop berbeda. Amplop punya aturannya sendiri, dan aturan itulah yang biasanya rusak. Nilainya jarang menjadi masalah; pengiriman nilainya yang bermasalah. Pisahkan kedua gagasan itu dan diagnosis menjadi lebih singkat.

Where the value stopsWhat you seeWhat you checkWho owns the fix
GUI field or managed profileA validation message before any connection opensThe selected authentication mode and whether the field holds the secret or the usernameThe device owner or the profile author
Keychain or secret agentA prompt that keeps reappearing, or an agent errorWhether the agent is unlocked and holds an entry for this profileThe user who owns the keychain
Two-line credential fileA prompt for a password that was already suppliedLine count, line order and whether a trailing newline is presentWhoever generated the file
Shell argument or environmentWorks interactively but fails in automationWhether the shell expanded, trimmed or logged the valueWhoever wrote the automation

Opsi klien OpenVPN 2.6 komunitas menjelaskan berkas dua baris untuk auth-user-pass, termasuk perilaku ketika baris kata sandi tidak ada: klien akan menanyakannya. Satu detail itu menjelaskan sekelompok laporan yang berbunyi klien meminta kata sandi yang sudah saya berikan. Itu juga memberi tahu Anda bahwa baris kedua yang kosong adalah keadaan yang bermakna, bukan pilihan pemformatan yang tak berbahaya.

Tanda kutip adalah lapisan tersendiri lagi: tanda kutip di dalam berkas kredensial biasa disimpan sebagai data, sedangkan shell menghapusnya sebelum program melihat apa pun. Karakter yang sama tidak berbahaya di satu tempat dan struktural di tempat lain. Tabel tidak dapat memberi tahu wadah mana yang dipakai klien Anda, jadi bacalah konfigurasi klien itu sendiri sebelum memilih baris.

Pemisah baris juga struktural. Berkas dengan bidang yang dipisahkan baris tidak dapat membawa nilai yang berisi baris baru, dan itu batasan format, bukan penilaian tentang kekuatan kata sandi. Gunakan mekanisme pengiriman yang didukung oleh penerapan, alih-alih memangkas rahasia agar muat dalam berkas improvisasi.

Bangun berkas kredensial tanpa kerusakan dari shell

Jalur lokal teraman menjauhkan rahasia dari riwayat shell dan dari daftar argumen proses. Baca kedua bidang secara interaktif, lalu tulis dua baris yang diharapkan klien. Selebihnya bisa tetap berada di berkas konfigurasi yang mudah ditinjau.

read -r VPN_USER
read -rs VPN_PASS
printf '%s\n%s\n' "$VPN_USER" "$VPN_PASS" > /etc/openvpn/client/creds
chmod 600 /etc/openvpn/client/creds
openvpn --config /etc/openvpn/client/office.conf --auth-user-pass /etc/openvpn/client/creds

Dua perintah pertama membaca nama pengguna lalu kata sandi tanpa menampilkannya, perintah ketiga menulis kedua baris, perintah keempat membatasi berkas, dan yang terakhir menjalankan klien dengan berkas itu. Perhatikan bahwa read -r mempertahankan garis miring terbalik, dan justru detail semacam itulah yang mengubah kata sandi yang berfungsi menjadi gagal ketika dihilangkan.

Hindari menyusun berkas dengan variabel tanpa tanda kutip atau dokumen here yang penuh ekspansi shell. Keduanya dapat mengubah karakter sebelum mencapai berkas, dan kegagalan yang dihasilkan tampak seperti penolakan VPN karena kata sandi di disk memang berbeda dari yang Anda ketahui. Jika curiga, bandingkan panjang byte berkas dengan nilai yang diharapkan, tanpa mencetak rahasianya. Selisih satu atau dua byte adalah tanda khas kecelakaan tanda kutip.

Baca tahapnya dari kesalahan pertama

Simpan pesan spesifik pertama dari satu upaya, lalu klasifikasikan. Kesalahan validasi lokal, kunci privat yang hilang, agen rahasia yang tidak tersedia, dan kegagalan autentikasi gateway adalah empat hasil berbeda dengan empat pemilik berbeda. Hanya satu di antaranya menyangkut akun.

Jika gateway memang menolak kredensial yang dikirim dengan benar, periksa akun, backend autentikasi, dan tantangan apa pun yang diwajibkan bersama administrator. Kegagalan autentikasi yang umum tidak menyebut karakter terlarang.

Pulihkan nilai yang disetujui melalui mekanisme yang benar, bukan dengan menyederhanakannya menjadi huruf dan angka. Kebijakan kata sandi milik operator, dan akal-akalan yang diam-diam mengalahkannya bukanlah perbaikan. Itu juga menyembunyikan cacat sebenarnya dari orang berikutnya, yang akan menemui kesalahan sama dengan kata sandi lebih lemah dan tanpa gagasan yang lebih baik.

Artikel terkait