200 likes | 241 Views
Megosztott szerelvények. Krizsán Zoltán 1.0. Privát vs Megosztott szerelvények. Privát szerelvény: telepítés, ha a szerelvény bárhová felmásoljuk, a használó másik szerelvény mellé, ilyenkor más szerelvények nem érik el. Nem kell regisztry-t, ini fájlokat módosítani
E N D
Megosztott szerelvények Krizsán Zoltán 1.0
Privát vs Megosztott szerelvények • Privát szerelvény: • telepítés, ha a szerelvény bárhová felmásoljuk, a használó másik szerelvény mellé, ilyenkor más szerelvények nem érik el. • Nem kell regisztry-t, ini fájlokat módosítani • Megosztott (publikus, globális) szerelvény: • A rendszeren, és a hálózaton levő összes szerelvény használhatja, központi helyen kell legyen. • .NET Framework Class Library (FCL)
Erős – gyenge nevű szerelvény • Ugyanaz a felépítés (csak privát lehet): • PE • CLR fej • metadata • ... • Azonban erős név (privát és globális is lehet): készítő privát / publikus kulcsa jelöli, ezért: • egyedi • biztonságos • verzionált • bárhová telepíthető (akár a hálózaton is)
Probléma • Legyen Asm egy legalább 2 szerelvény által használt szerelvény, benne típusok. • Két különböző cég implementálja ugyanazokat a típusokat. • Telepítés régi módszerrel:Egyikkel felülírjuk a másikat (dll hell)!Fájlnevek különbsége sem elég! • Megoldás az erős név!
Erős név tartalma • fájlnév (kiterjesztés nélkül) • verziószám (x.y.v.z alakú) • kultúra azonosító (nyelvi + területi azonosítás, neutral=nincs) • publikus kulcs token (publikus kulcsból ered) Pl.: mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Publikus privát kulcsú titkosítás • 2 cég -> 2 különböző titkos/nyilvános kulcspár -> különböző erős név • Lehetne GUIID alapú is, titkosítás alkalmazásával lehet a szerelvény sértetlenségét, is biztosítani!
Erős nevű szerelvény létrehozása • Erős név generáltatása:SN.exe –k sajat.kulcs (Strong Name Utility). Létrehoz egy fájlt, amiben saját (128 byte) / nyilvános (438 byte) kulcs tárolódik.(Paraméterei kis-, nagybetű érzékenyek) • Megfelelő attribútum beállítása.pl.: AssemblyInfo.cs fájlba[assembly: AssemblyKeyFile(”sajat.kulcs”)]vagyal.exe /keyfile kapcsoloval
Erős nevű szerelvény létrehozása II • Ezek után a fordító megjelöli a saját kulccsal a szerelvényt. • Beilleszti a nyilvános kulcsot a manifest-beMár amelyiknek van manifestje.(Emlékezzünk – több modul esetén, csak egynek van)
Digitális jelölés I • A szerelvény metadata FileDef táblája tartalmazza a fájlok listáját, és az egyes fájlok nevét és ujjlenyomatát. Újlenyomat = hash összeg. (Alapértelmezett a SHA-1, de felülbírálható)
PE fej METADATA Manifest Publikus kulcs Hash algoritmus IL kód CLR fej Megosztott szerelvények Hash érték privát kulcs RSE digitális aláírás
Digitális aláírás szerepe • Biztosít a szerelvény hiteleségéről, származásáról • A szerelvény betöltése előtt mindig ellenőrzi, így biztosítja a szerelvény sértetlenségét.Ha valaki módosítja a szerelvény tartalmát, akkor újlenyomatok változnak!
Telepítés • Ha mindenki elérheti, akkor egy központi (CLR által ismert) helyre kell telepíteni, ahol a CLR keresi, ha hivatkozás van. • Global Assembly Cache (GAC) • Helye: %windir%\Assembly\GAC • Jegyzékeket tartalmaz.Tilos kézzel bemásolni a szerelvényt!Használjunk eszközöket, amelyek létrehozzák, és bemásolják a szerelvény(eke)t.
Gacutil.exe – telepítő alkalmazás • Csak az adminisztrátor tagjai használhatják. • /l szerelvény – kiírja a szerelvény adatait, ha nincs paraméter, akkor mindet • /i – telepíti a szerelvényt/if – ha már telepítve volt, akkor felülírjaHa nincs a szerelvénynek erős neve, akkor hibajelzést kapunk! • /u – törli a szerelvényt a rendszerből
Ha minden stimmel, akkor ... • Internet explorer-el (nem total commander) egyszerűen behúzzuk drag and drop, ha az telepíthető, akkor telepíti. • Ilyenkor telepíti, nem bemásolja!
GAC belső struktúrája • Az adott helyen jegyzék a szerelvény neve. • Benne jegyzékek, melyek alakja:(verzió_kultúra_publikusKulcsToken, ha a kultúra neutral, akkor nincs)pl.: 0.0.0.0__378dfefaa4be9a09
Szerelvények használata • Fordításkor: csc /reference szerelvény_névHol keresi: • munkakönyvtárban • ahol a CLR van • amit megadunk a fordítónak /lib • LIB környezeti változó
Késleltetett (delayed), részleges (partial) jelölés • A saját kulcs titkossága nagyon fontos, vigyázzunk rá! • Nagyobb cégek (pl. Microsoft) nem adja ki minden alkalmazottnak, de fejleszteni kell! • Megoldás: fejlesztés alatt csak a publikus kulcsot használjuk.
Késleltetett jelölés használata • Egyszer létrehozzuk a saját/nyilvános kulcspárt tartalmazó fájlt sn.exe –k sajat.kulcs • Kiszedjük a nyilvános kulcsot a pub.kulcs-basn.exe –p sajat.kulcs pub.kulcs • Majd megadjuk a megfelelő attribútumotAssemblyDelaySign(true) vagyaz al.exe /delay
Késleltetett jelölés használata II • Lefordítjuk a szerelvény • Nem telepítjük a Gacutil.exe-vel (vagy a drag n’ drop), hanem sn.exe –Vr szerelveny.dll [felhasználó lista]regisztrálja, ellenőrzés kiiktatjuk. • Végül, miután elkészült a végleges verzió, jelöljük (hitelesítsük) a saját kulccsal:sn.exe –R szerelveny.dll sajat.kulcs • Visszaállítjuk az ellenőrzést:sn.exe –Vu szerelvény.dll