OpenVPN username-as-common-name: mengapa pemeriksaan CN Anda kosong
Skrip client-connect yang membandingkan common_name dengan username dapat membandingkan nama dengan dirinya sendiri. Ikat sertifikat ke akun sebelum penggantian berjalan.
Anda menambahkan skrip client-connect yang menolak setiap koneksi di mana common_name berbeda dari username, dan tampaknya itu mengikat sertifikat dengan akun. Pada server yang menjalankan username-as-common-name, perbandingan itu sudah kehilangan maknanya saat skrip berjalan. Kedua nilai adalah string yang sama, jadi uji itu lolos untuk sertifikat yang diterbitkan untuk orang lain sama sekali.
Pemeriksaan itu tidak salah karena skripnya ditulis dengan buruk. Pemeriksaan itu salah karena nilai yang dibacanya sudah diganti lebih awal dalam koneksi yang sama.
Apa yang tampaknya dibuktikan oleh perbandingan itu
Autentikasi sertifikat dan autentikasi kata sandi adalah bukti terpisah, dan server dapat menuntut keduanya tanpa menuntut bahwa keduanya milik orang yang sama. Celahnya nyata: sertifikat perangkat yang sah ditambah akun mana pun yang sah adalah klaim yang berbeda dari sertifikat perangkat itu ditambah satu akun bernama. Skrip yang membandingkan common_name dengan username terbaca seperti mata rantai yang hilang di antara keduanya. Itulah gunanya, jika common_name masih berarti seperti yang dinyatakan sertifikat.
Apakah demikian bergantung pada satu opsi server, dan opsi itu biasanya diaktifkan karena alasan yang tidak berkaitan, misalnya agar berkas konfigurasi per pengguna lebih mudah diberi nama.
Apa yang dilakukan username-as-common-name terhadap nama
Dengan username-as-common-name aktif, OpenVPN mengganti nama umum sertifikat dengan nama pengguna yang terautentikasi setelah nama pengguna dan kata sandi diverifikasi. Kait verifikasi yang berjalan selama pemeriksaan itu masih menerima nama umum sertifikat, karena penggantian belum terjadi. Semua yang sesudahnya, termasuk client-connect, melihat nama pengguna. Jadi panggilan balik yang lebih lambat menerima satu identitas dua kali dan tidak dapat membandingkannya dengan sertifikat yang disajikan.
| Stage | What common_name holds |
|---|---|
| Username and password verification hook | The certificate common name, for example bob-device |
| After the replacement | The authenticated account, alice |
| client-connect callback | The account again, alice |
Ikuti satu koneksi ilustratif: sertifikat yang diterbitkan untuk bob-device, login direktori yang berhasil sebagai alice, dan opsi yang diaktifkan. Tahap verifikasi masih dapat melihat dua string yang berbeda. Tahap koneksi melihat alice dan alice.
Contoh itu menunjukkan mengapa perbandingannya kosong. Contoh itu tidak menunjukkan bahwa koneksi akan diterima sebaliknya, karena validasi sertifikat dan verifikasi kata sandi tetap berjalan sendiri.
Tempatkan ikatan di tempat kedua identitas masih ada
Aturan itu harus ditegakkan pada tahap yang melihat identitas sertifikat dan akun pada saat yang sama, yang dalam praktiknya berarti kait verifikasi nama pengguna dan kata sandi atau plugin yang dimuat di sana. Plugin yang didukung dan sudah melakukan verifikasi kata sandi biasanya merupakan tempat yang tepat untuk menambahkan aturan pemasangan, karena menggantinya dengan perbandingan nama akan menghapus pemeriksaan kata sandi sepenuhnya.
Tentukan pemetaan sebelum menulis kode, karena kesetaraan jarang menjadi kebijakan yang sebenarnya. Sertifikat sering mengidentifikasi perangkat sementara login mengidentifikasi orang, dan satu perangkat dapat secara sah melayani beberapa orang. Simpan hubungan itu dalam bentuk yang penerbitannya Anda kendalikan, dan tentukan apa yang terjadi saat penggantian nama, penerbitan ulang, dan nama yang memakai kualifikasi domain. Mengubah ke huruf kecil atau menghapus awalan domain tanpa memahami direktori dapat menggabungkan dua akun yang seharusnya tetap terpisah.
Ingat bahwa opsi itu juga mengubah konfigurasi per klien mana yang berlaku, karena client-config-dir dikunci berdasarkan nama umum.
Uji pemasangan dengan dua kredensial yang sah
Mulailah dengan pasangan yang diizinkan kebijakan Anda dan pastikan itu terhubung. Lalu ajukan sertifikat sah yang sama dengan akun lain yang juga sah: percobaan itu harus gagal, dan harus gagal karena aturan pemasangan, bukan karena kata sandi yang salah ketik. Kata sandi yang salah membuktikan pemeriksaan kata sandi berfungsi dan tidak mengatakan apa pun tentang aturan antara sertifikat dan akun.
Periksa juga jalur sertifikat yang hilang dan sertifikat yang tidak sah, dan pastikan identitas mana yang digunakan server untuk pengaturan per klien. Jika satu-satunya cara agar perbandingan berfungsi adalah menonaktifkan username-as-common-name, perhitungkan dulu biaya perubahan itu, karena perubahan itu mengembalikan pencarian konfigurasi setiap klien ke nama sertifikat.