OpenVPN username-as-common-name: mengapa pemeriksaan CN anda kosong
Skrip client-connect yang membandingkan common_name dengan username boleh membandingkan nama dengan dirinya sendiri. Ikat sijil pada akaun sebelum penggantian dijalankan.
Anda menambah skrip client-connect yang menolak setiap sambungan di mana common_name berbeza daripada username, dan ia kelihatan seperti ikatan antara sijil dan akaun. Pada pelayan yang menjalankan username-as-common-name, perbandingan itu telah hilang maknanya apabila skrip dijalankan. Kedua-dua nilai ialah rentetan yang sama, jadi ujian itu lulus untuk sijil yang dikeluarkan kepada orang lain sama sekali.
Pemeriksaan itu tidak salah kerana skrip ditulis dengan buruk. Ia salah kerana nilai yang dibacanya telah diganti lebih awal dalam sambungan yang sama.
Apa yang perbandingan itu kelihatan membuktikan
Pengesahan sijil dan pengesahan kata laluan ialah bukti berasingan, dan pelayan boleh menuntut kedua-duanya tanpa menuntut ia milik orang yang sama. Jurang itu nyata: sijil peranti yang sah ditambah mana-mana akaun sah ialah dakwaan yang berbeza daripada sijil peranti itu ditambah satu akaun bernama. Skrip yang membandingkan common_name dengan username terbaca seperti pautan yang hilang antara keduanya. Ia akan menjadi begitu, jika common_name masih bermaksud apa yang dikatakan sijil itu.
Sama ada ia bergantung pada satu pilihan pelayan, dan pilihan itu biasanya dihidupkan atas sebab yang tidak berkaitan, seperti menjadikan fail konfigurasi setiap pengguna lebih mudah dinamakan.
Apa yang username-as-common-name lakukan pada nama
Dengan username-as-common-name dihidupkan, OpenVPN menggantikan nama umum sijil dengan nama pengguna yang disahkan selepas nama pengguna dan kata laluan disahkan. Cangkuk pengesahan yang berjalan semasa pemeriksaan itu masih menerima nama umum sijil, kerana penggantian belum berlaku. Semua selepas itu, termasuk client-connect, melihat nama pengguna. Jadi panggilan balik kemudian menerima satu identiti dua kali dan tidak boleh membandingkannya dengan sijil yang dikemukakan.
| 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 sambungan contoh: sijil yang dikeluarkan untuk bob-device, log masuk direktori yang berjaya sebagai alice, dan pilihan dihidupkan. Peringkat pengesahan masih boleh melihat dua rentetan berbeza. Peringkat sambungan melihat alice dan alice.
Contoh itu menunjukkan mengapa perbandingan itu kosong. Ia tidak menunjukkan sambungan itu akan diterima sebaliknya, kerana pengesahan sijil dan pengesahan kata laluan masih berjalan sendiri.
Letakkan ikatan di tempat kedua-dua identiti masih wujud
Peraturan itu mesti dikuatkuasakan pada peringkat yang melihat identiti sijil dan akaun pada masa yang sama, yang dalam praktiknya bermaksud cangkuk pengesahan nama pengguna dan kata laluan atau pemalam yang dimuatkan di situ. Pemalam yang disokong yang sudah melakukan pengesahan kata laluan biasanya tempat yang betul untuk menambah peraturan pasangan, kerana menggantikannya dengan perbandingan nama akan menghapuskan pemeriksaan kata laluan sepenuhnya.
Takrifkan pemetaan sebelum menulis kod, kerana kesamaan jarang menjadi dasar sebenar. Sijil sering mengenal pasti peranti manakala log masuk mengenal pasti orang, dan satu peranti boleh berkhidmat kepada beberapa orang secara sah. Simpan hubungan itu dalam bentuk yang penerbitannya anda kawal, dan tentukan apa yang berlaku apabila nama ditukar, diterbitkan semula dan pada nama yang layak domain. Menukar kepada huruf kecil atau membuang awalan domain tanpa memahami direktori boleh menggabungkan dua akaun yang sepatutnya kekal berasingan.
Ingat bahawa pilihan itu juga menukar konfigurasi setiap klien yang terpakai, kerana client-config-dir dikunci oleh nama umum.
Uji pasangan itu dengan dua kelayakan yang sah
Mulakan dengan pasangan yang dibenarkan oleh dasar anda dan sahkan ia bersambung. Kemudian kemukakan sijil sah yang sama dengan akaun lain yang juga sah: percubaan itu mesti gagal, dan ia mesti gagal kerana peraturan pasangan dan bukan kerana kata laluan yang salah ditaip. Kata laluan yang salah membuktikan pemeriksaan kata laluan berfungsi dan tidak mengatakan apa-apa tentang peraturan antara sijil dan akaun.
Periksa juga laluan sijil yang hilang dan sijil tidak sah, dan sahkan identiti mana yang digunakan pelayan untuk tetapan setiap klien. Jika satu-satunya cara untuk menjadikan perbandingan itu berfungsi ialah mematikan username-as-common-name, nilaikan kos perubahan itu dahulu, kerana ia mengembalikan carian konfigurasi setiap klien kepada nama sijil.