Rahasia Tidak Valid Itu Masalah Wadah, Bukan Aturan Kata Sandi
Kredensial yang ditolak mungkin tidak pernah sampai ke gateway. Bandingkan dulu wadah masukan, tahap autentikasi, dan akunnya sendiri.
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 stops | What you see | What you check | Who owns the fix |
|---|---|---|---|
| GUI field or managed profile | A validation message before any connection opens | The selected authentication mode and whether the field holds the secret or the username | The device owner or the profile author |
| Keychain or secret agent | A prompt that keeps reappearing, or an agent error | Whether the agent is unlocked and holds an entry for this profile | The user who owns the keychain |
| Two-line credential file | A prompt for a password that was already supplied | Line count, line order and whether a trailing newline is present | Whoever generated the file |
| Shell argument or environment | Works interactively but fails in automation | Whether the shell expanded, trimmed or logged the value | Whoever 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.