A cikkben részletezzük a mellékelt példa mappájában megtalálható TestCert.cer tanúsítvány-állomány generálásának lépéseit. A tanúsítványt felhasználva ismerkedünk meg a bevezetőben említett segédprogramok működésével. A felhasznált segédprogramok mindegyike a <winroot>:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Bin mappában található a VS.NET telepítése után.
Tanúsítványgenerálás lépései
A Visual Studio.NET parancssori eszközéről, a MAKECERT.EXE alkalmazásról van szó, melynek használatát ismertetjük. Használatához az IDE saját parancssorát kell elindítanunk (elérési útvonala: <winroot>:\Program Files\Microsoft Visual Studio .NET\Common7\Tools\vsvars32.bat).
Az alkalmazás segítségével tesztelési célra készíthetünk X509. szabvány szerinti tanúsítványokat. Az eszköz elkészít egy nyilvános kulcs - privát kulcs párt, melyeket egy tanúsítvány-állományban tárol. A létrehozott tanúsítványt hozzákapcsolja egy tanúsítvány kibocsátóhoz, valamint lehetővé teszi, hogy tetszőleges nevet rendeljünk a tanúsítványhoz.
Az alkalmazás általános szintaxisa a következő:
makecert [opciók] fájlnév
A fájlnév argumentumban kell megadnunk a tanúsítványt tároló állomány nevét, valamint igény szerint a létrehozás helyét. Az állomány kiterjesztése lehetőleg .CER legyen.
A program számtalan alapvető, és kiegészítő opcióval rendelkezik, a cikkben a legjellemzőbbeket ismertetjük.
| Opciók |
Megjegyzés |
| -n X509név |
A tanúsítvány neve. A névnek X.500 szabvány szerintinek kell lenni, vagyis ”CN=név” formátumúnak. |
| -sk kulcsnév |
A kulcs konténer neve, melyben a privát kulcs megtalálható. Ha nincs megadva, létrehozásra kerül. |
| -sr hely |
A tanúsítvány (registry-ben történő) tárolási helyét specifikálhatjuk így. Értékei LOCALMACHINE vagy CURRENTUSER (alapértelmezett). |
| -ss tároló neve |
Tároló neve. |
| -# szám |
A tanúsítvány sorszáma, melyet alapértelmezésben a program generál. |
| -$ engedély |
A tanúsítvány típusát adhatjuk meg. Értékei lehetnek COMMERCIAL (kereskedelmi szoftverkibocsátók által használt) vagy INDIVIDUAL (egyedi szoftverkibocsátók által használt). |
| -? |
Kilistázza az alapvető opciókat. |
| -a aláírási algoritmus |
Az aláírás algoritmusa specifikálható. Értékei MD5 (alapértelmezett) vagy SHA1 lehetnek. |
| -b nn/hh/éééé |
Az érvényességi periódus kezdete. Alapesetben a kibocsátás időpontja. |
| -e nn/hh/éééé |
Az érvényesség lejárta. Alapértelmezésben 2039. 12. 31. |
A tanúsítvány neve (nem az állománynév) VSCert lesz. A létrehozáshoz indítsuk el a Visual Studio.NET parancssort, majd gépeljük be a következő sort:
makecert –sk mycert –ss root –n CN=VSCert <elérési útvonal>TestCert.cer
Mivel nem specifikáltuk, hogy mely tárolóban helyezze el a program a tanúsítványunkat, megjelenik egy üzenetpanel, mely rákérdez, hogy elhelyezheti a tanúsítványt ROOT tárolóban.
A panelen többek között szerepel a tanúsítvány sorszáma, mellyel tárolásra kerül a Rendszerleíró adatbázis következő kulcsában:
HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates\Root\Certificates\0D7798EFBF66E3019E15B2D4F9C1936D6815A382
Látható, hogy a tanúsítvány az alapértelmezett tárolóba került (currentuser).
Annak érdekében, hogy a tanúsítvány használható legyen, telepítenünk kell a rendszerben. Ennek érdekében az elindított VS parancssorba gépeljük be a certmgr parancsot, melynek eredményeképpen elindul a .NET Framework Certification Manager segédprogramja. A segédprogramban egy táblázatcsoportot találunk, melynek fülei segítségével kereshetjük ki a „Megbízható gyártók” feliratú táblázatot. Most még nem található benne a VSCert tanúsítvány.
A telepítéshez a panel „Importálás” feliratú nyomógombjára kell kattintanunk, majd a „Tanúsítványimportáló varázsló” ablakban meg kell adni a TestCert.cer állomány elérési útját.
A művelet végén a VSCert tanúsítvány megjelenik a fenti táblázatban.
A tanúsítvány ezennel kész, telepítve van. Most már csak fel kell használnunk a segédprogramokban.
CERT2SPC.EXE segédprogram
A segédprogram hivatalos neve Software Publisher Certificate Test Tool, melynek segítségével egy úgynevezett Software Publisher's Certificate-et (szabadon fordítva Szoftvergyártói Tanúsítvány) készíthetünk a meglévő, vagy tesztelési célra generált tanúsítványból. A generált kimenet egy .SPC kiterjesztésű állomány, mely egy vagy több tanúsítvány felhasználásával készíthető tesztelési célra.
A program használatának szintaxisa a következő:
Cert2spc tanúsítvány(1) [...tanúsítvány(n)] állománynév.spc
A használandó argumentumok a következők:
| Argumentumok |
Megjegyzés |
| Tanúsítvány(1…n) |
A felhasznált tanúsítvány(ok). |
| Kimenet.spc |
A generált SPC állomány. |
| /? |
Megjeleníthetjük a segédprogram használatának módját. |
A saját tanúsítványunkhoz is generálhatunk SPC tanúsítványt a következőképpen:
Cert2spc <elérési út>TestCert.cer <elérési út>TestSPC.spc
A keletkezett állományon kétszer kattintva megjeleníthetünk egy dialógusablakot, melyben megtekinthetjük, hogy az SPC milyen tanúsítványokból lett létrehozva.
SIGNCODE.EXE segédprogram
A segédprogram segítségével lehetőségünk van egy assembly-t aláírni Authenticode digitális aláírással. Az assembly tárolódhat egy DLL-ben, vagy egy EXE állományban. A SIGNCODE.EXE segédprogram számtalan parancssori argumentummal rendelkezik, melyek közül a gyakrabban használtakat most felsoroljuk. A mennyiben a programot opciók nélkül indítjuk el, úgy egy grafikus felülettel találkozhatunk, mely varázslóként végigvezet minket az aláírás menetén.
A program használatának általános szintaxisa a következő:
signcode [opciók] aláírandó fájl neve
| Argumentumok |
Megjegyzés |
| -a algoritmus |
Megadható a HASH titkosítási algoritmus neve, mely MD5, vagy SHA1 kell legyen. Az alapértelmezett az MD5. |
| -c fájlnév |
Megadható annak a fájlnak a neve, mely tartalmazza a kódolt SPC-t. |
| -cn név |
Megadható az általános neve a tanúsítványnak (példánkban VSCert). |
| -i információ |
Specifikálható, hogy maradjon hely kiegészítő információk elhelyezéséhez (például egy URL számára). |
| -p provider |
Megadható a titkosításszolgáltató (Cryptographic Provider) neve. |
| -r hely |
Megadható, hogy hol helyezkedjen el a tanúsítvány a Rendszerleíró adatbázisban. A lehetséges értékek: CURRENTUSER (alapértelmezett), LOCALMACHINE. |
| -s tároló |
Megadható a tároló, ahol a tanúsítvány tárolódjon. Az alapértelmezett tároló a MY. |
| -spc fájlnév |
Az SPC állomány neve, mely tartalmazza a SPC tanúsítványt. |
| -t URL |
Az időbélyeggel ellátandó assembly esetében megadható, hogy egy „Time Server” szolgáltassa az időbélyeget. Ennek HTTP címe adható meg itt. |
| -v privátkulcs neve |
Megadható egy privát kulcsot tartalmazó állomány neve is (.PVK). |
| -x |
Az assembly időbélyeggel lesz ellátva, de nem lesz aláírva. |
| -y titkosítási szolgáltató neve |
A Cryptographic Provider típusa adható meg. |
| -? |
Segítség megjelenítése. |
A mellékelt példában a fent generált és telepített TestCert.cer állomány felhasználásával fogjuk aláírni a STLibrary.dll állományt. A regisztrált tanúsítvány neve tehát VSCert, melyet a következőképpen használunk a SIGNCODE.EXE programban, hogy az aláírást létrehozzuk:
Signcode –cn VSCert –s root <elérési út>STLibrary.dll
A –s kapcsolóval megadtuk, hogy a tanúsítvány a ROOT tárolóban van. Ennek elhagyásával a program a MY tárolóban keresi azt, és mivel a tanúsítvány ott nem található, a művelet kisiklik.
CHKTRUST.EXE segédprogram
A program segítségével ellenőrizhetjük a fent létrehozott aláírást. A program használatának általános szintaxisa a következő:
chktrust [/q] [/v] aláírt állomány neve
A programot két opcióval használhatjuk, melyek jelentését a következő táblázat foglalja össze.
| Opciók |
Megjegyzés |
| /q |
Amennyiben nem tartalmaz aláírást az assembly, akkor sem jelenít meg információkat ezzel kapcsolatban. |
| /v |
Részletes információkat jelenít meg az aláírás kibocsátójáról, amennyiben az assembly tartalmaz aláírást. |
A STLibrary.dll assembly ellenőrzése példánk esetében a következő szintaxissal történik.
A parancsvégrehajtás után a következő üzenet jelenik meg a konzolon, ha végrehajtottuk a korábbi aláírási procedúrát: <elérési út>STLibrary.dll: Succeeded.
Abban az esetben, ha a DLL nincs aláírva, és nem használtuk a /q argumentumot, akkor egy dialógusablak jelenik meg, mely figyelmeztet arra, hogy az assembly nem tartalmaz aláírást.
A panelen az Igen gombra kattintva elérhető, hogy a DLL-t ettől függetlenül használhassuk.