OpenVPN username-as-common-name: miért üres a CN-ellenőrzésed
A common_name és a username összehasonlítását végző client-connect szkript egy nevet önmagával hasonlíthat össze. Rögzítse a tanúsítványt a fiókhoz, mielőtt a csere lefut.
Hozzáadsz egy client-connect szkriptet, amely elutasít minden olyan kapcsolatot, ahol a common_name eltér a username értékétől, és ez úgy tűnik, mintha összekötné a tanúsítványt a fiókkal. Egy username-as-common-name beállítással futó kiszolgálón ez az összehasonlítás már elvesztette értelmét, mire a szkript lefut. Mindkét érték ugyanaz a karakterlánc, így a teszt átmegy egy teljesen másvalakinek kiállított tanúsítvány esetén is.
Az ellenőrzés nem azért hibás, mert a szkript rosszul van megírva. Azért hibás, mert az általa olvasott értéket ugyanabban a kapcsolatban korábban lecserélték.
Mit látszik bizonyítani az összehasonlítás
A tanúsítvány-hitelesítés és a jelszó-hitelesítés külön bizonyítékok, és a kiszolgáló mindkettőt megkövetelheti anélkül, hogy megkövetelné, ugyanahhoz a személyhez tartozzanak. A rés valós: egy érvényes eszköztanúsítvány bármely érvényes fiókkal más állítás, mint ugyanaz a tanúsítvány egyetlen megnevezett fiókkal. A common_name és a username összehasonlítását végző szkript a kettő közötti hiányzó láncszemként olvasható. Az is lenne, ha a common_name még azt jelentené, amit a tanúsítvány mondott.
Hogy így van-e, egyetlen kiszolgálóbeállítástól függ, és ezt a beállítást általában független okból kapcsolják be, például hogy könnyebb legyen elnevezni a felhasználónkénti konfigurációs fájlokat.
Mit tesz a username-as-common-name a névvel
Ha a username-as-common-name be van kapcsolva, az OpenVPN a jelszó és a felhasználónév ellenőrzése után a hitelesített felhasználónevet teszi a tanúsítvány közönséges neve helyére. Az ellenőrzés során futó ellenőrző kampó még mindig a tanúsítvány közönséges nevét kapja, mert a csere még nem történt meg. Minden későbbi, a client-connect is beleértve, a felhasználónevet látja. Így a későbbi visszahívás egyetlen identitást kap kétszer, és nem tudja összevetni a bemutatott tanúsítvánnyal.
| 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 |
Kövess egy szemléltető kapcsolatot: bob-device számára kiállított tanúsítvány, sikeres könyvtárbejelentkezés alice néven, és a beállítás bekapcsolva. Az ellenőrzési szakasz még két különböző karakterláncot lát. A kapcsolódási szakasz a alice és a alice értéket látja.
Ez a példa megmutatja, miért üres az összehasonlítás. Nem mutatja meg, hogy a kapcsolat egyébként elfogadható lenne, mivel a tanúsítvány-érvényesítés és a jelszó-ellenőrzés továbbra is önállóan fut.
Helyezze a kötést oda, ahol mindkét identitás még létezik
A szabályt olyan szakaszban kell kikényszeríteni, amely egyszerre látja a tanúsítvány identitását és a fiókot, ami a gyakorlatban a felhasználónév- és jelszó-ellenőrző kampót vagy az ott betöltött bővítményt jelenti. Egy támogatott bővítmény, amely már végez jelszó-ellenőrzést, általában a megfelelő hely a párosítási szabály hozzáadására, mert név-összehasonlítással helyettesítve teljesen elveszne a jelszó-ellenőrzés.
A kód írása előtt határozza meg a leképezést, mert az egyenlőség ritkán a valódi szabály. A tanúsítvány gyakran egy eszközt azonosít, míg a bejelentkezés egy személyt, és egy eszköz jogszerűen szolgálhat több embert. A kapcsolatot olyan formában tárolja, amelynek kiállítását Ön ellenőrzi, és döntse el, mi történik átnevezéskor, újrakiadáskor és tartományi minősítésű nevek esetén. A kisbetűsítés vagy a tartományi előtag eltávolítása a könyvtár megértése nélkül összevonhat két fiókot, amelyeket külön kellett volna tartani.
Ne feledje, hogy a beállítás azt is megváltoztatja, melyik ügyfélenkénti konfiguráció érvényes, mert a client-config-dir a közönséges névhez van kötve.
Tesztelje a párosítást két érvényes hitelesítő adattal
Kezdje azzal a párral, amelyet a szabályzata engedélyez, és erősítse meg, hogy csatlakozik. Majd mutassa be ugyanazt az érvényes tanúsítványt egy másik, egyébként érvényes fiókkal: ennek a kísérletnek meg kell hiúsulnia, és a párosítási szabály miatt kell meghiúsulnia, nem pedig egy elgépelt jelszó miatt. A rossz jelszó bizonyítja, hogy a jelszó-ellenőrzés működik, és semmit sem mond a tanúsítvány és a fiók közötti szabályról.
Ellenőrizze a hiányzó tanúsítvány és az érvénytelen tanúsítvány útvonalait is, és erősítse meg, melyik identitást használja a kiszolgáló az ügyfélenkénti beállításokhoz. Ha az összehasonlítás működésének egyetlen módja a username-as-common-name kikapcsolása, először árazza be ezt a változtatást, mert az minden ügyfél konfigurációkeresését visszaállítja a tanúsítvány nevére.