OpenVPN username-as-common-name: prečo je vaša kontrola CN prázdna
Skript client-connect, ktorý porovnáva common_name s username, môže porovnávať názov so sebou samým. Prepojte certifikát s účtom skôr, než sa vykoná nahradenie.
Pridáte skript client-connect, ktorý odmietne každé spojenie, v ktorom sa common_name líši od username, a vyzerá to ako prepojenie certifikátu s účtom. Na serveri, ktorý spúšťa username-as-common-name, toto porovnanie už stratilo zmysel, keď sa skript spustí. Obe hodnoty sú ten istý reťazec, takže test prejde aj pre certifikát vydaný úplne inej osobe.
Kontrola nie je nesprávna preto, že je skript zle napísaný. Je nesprávna preto, že hodnota, ktorú číta, bola nahradená skôr v tom istom spojení.
Čo porovnanie akoby dokazuje
Autentifikácia certifikátom a autentifikácia heslom sú oddelené dôkazy a server môže vyžadovať obe bez toho, aby vyžadoval, že patria tej istej osobe. Medzera je skutočná: platný certifikát zariadenia plus akýkoľvek platný účet je iné tvrdenie ako ten certifikát plus jeden menovaný účet. Skript porovnávajúci common_name s username sa číta ako chýbajúci článok medzi nimi. Bol by ním, ak by common_name stále znamenalo to, čo povedal certifikát.
Či to tak je, závisí od jednej možnosti servera, a táto možnosť sa zvyčajne zapína z nesúvisiaceho dôvodu, napríklad aby sa konfiguračné súbory pre jednotlivých používateľov ľahšie pomenúvali.
Čo username-as-common-name robí s názvom
Keď je username-as-common-name zapnutá, OpenVPN po overení používateľského mena a hesla nahradí spoločný názov certifikátu overeným používateľským menom. Háčik overenia, ktorý sa spúšťa počas tejto kontroly, stále dostáva spoločný názov certifikátu, pretože nahradenie ešte nenastalo. Všetko potom, vrátane client-connect, vidí používateľské meno. Preto neskoršie spätné volanie dostane jednu identitu dvakrát a nemôže ju porovnať s predloženým certifikátom.
| 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 |
Sledujte jedno ilustratívne spojenie: certifikát vydaný pre bob-device, úspešné prihlásenie do adresára ako alice a zapnutá možnosť. Fáza overenia ešte môže vidieť dva rôzne reťazce. Fáza pripojenia vidí alice a alice.
Tento príklad ukazuje, prečo je porovnanie prázdne. Neukazuje, že by spojenie bolo inak prijaté, pretože validácia certifikátu a overenie hesla stále bežia samostatne.
Umiestnite prepojenie tam, kde obe identity ešte existujú
Pravidlo sa musí presadzovať vo fáze, ktorá vidí identitu certifikátu a účet súčasne, čo v praxi znamená háčik overenia používateľského mena a hesla alebo tam načítaný doplnok. Podporovaný doplnok, ktorý už vykonáva overenie hesla, je zvyčajne správnym miestom na pridanie pravidla párovania, pretože jeho nahradenie porovnaním názvov by úplne odstránilo kontrolu hesla.
Definujte mapovanie pred písaním kódu, pretože rovnosť je zriedka skutočnou politikou. Certifikát často identifikuje zariadenie, zatiaľ čo prihlásenie identifikuje osobu, a jedno zariadenie môže legitímne obsluhovať viac ľudí. Uložte vzťah vo forme, ktorej vydávanie kontrolujete, a rozhodnite, čo sa stane pri premenovaní, pri opätovnom vydaní a pri názvoch kvalifikovaných doménou. Prevod na malé písmená alebo odstránenie doménovej predpony bez pochopenia adresára môže zlúčiť dva účty, ktoré mali zostať oddelené.
Pamätajte, že možnosť mení aj to, ktorá konfigurácia pre jednotlivých klientov platí, pretože client-config-dir je viazaný na spoločný názov.
Otestujte párovanie s dvoma platnými prihlasovacími údajmi
Začnite s párom, ktorý vaša politika povoľuje, a potvrďte, že sa pripája. Potom predložte ten istý platný certifikát s iným, ale inak platným účtom: tento pokus musí zlyhať a musí zlyhať pre pravidlo párovania, nie pre nesprávne zadané heslo. Nesprávne heslo dokazuje, že kontrola hesla funguje, a nič nehovorí o pravidle medzi certifikátom a účtom.
Skontrolujte aj cesty s chýbajúcim certifikátom a s neplatným certifikátom a potvrďte, ktorú identitu server používa pre nastavenia jednotlivých klientov. Ak je jediným spôsobom, ako dosiahnuť fungovanie porovnania, vypnutie username-as-common-name, najprv odhadnite náklady tejto zmeny, pretože vracia vyhľadávanie konfigurácie každého klienta späť na názov certifikátu.