Megosztott szerelvények Krizsán Zoltán
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) 2
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) 3
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! 4
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 5
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! 6
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”)] vagy al.exe /keyfile kapcsoloval 7
Erős nevű szerelvény létrehozása II után a fordító megjelöli a saját kulccsal a szerelvényt. ► Beilleszti a nyilvános kulcsot a manifest-be Már amelyiknek van manifestje. (Emlékezzünk – több modul esetén, csak egynek van) ► Ezek
8
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ó)
9
Megosztott szerelvények PE fej METADATA Manifest Publikus kulcs
IL kód
Hash algoritmus
Hash érték privát kulcs
CLR fej
RSE digitális aláírás 10
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!
11
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. 12
Gacutil.exe – telepítő alkalmazás ► Csak
az adminisztrátor tagjai használhatják. ► /l szerelveny – 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írja Ha nincs a szerelvénynek erős neve, akkor hibajelzést kapunk! ► /u – törli a szerelvényt a rendszerből 13
Windows explorer
14
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!
15
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
16
Szerelvények használata ► Fordításkor:
Hol keresi:
csc /reference szerelvény_név
munkakönyvtárban ahol a CLR van amit megadunk a fordítónak /lib LIB környezeti változó
17
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.
18
Késleltetett jelölés használata 1.
Egyszer létrehozzuk a saját/nyilvános kulcspárt tartalmazó fájlt
sn.exe –k sajat.kulcs
2.
Kiszedjük a nyilvános kulcsot a pub.kulcs-ba
3.
Majd megadjuk a megfelelő attribútumot AssemblyDelaySign(true) vagy az al.exe /delay
sn.exe –p sajat.kulcs pub.kulcs
19
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
20