
Mellékelt példa megnyitása előtt szükséges egy WSEService nevű virtuális könyvtár létrehozása, mely a példa mappájában található WSEService alkönyvtárra mutat. Ehhez nyissa meg a mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A kliens alkalmazás futtatása előtt gondoskodnunk kell arról, hogy a Web szerver virtuális mappájában engedélyezzük a névtelen hozzáférést.
A mellékelt példa használatához telepítenünk kell a Microsoft WSE 1.0 csomagot. Ennek elvégzéséhez olvassa el a Kezdeti lépések című fejezetet.
Kezdeti lépések
A Microsoft által elkészített csomag a Web Services Enhancements for Microsoft .NET nevet viseli, és cikkünk írásakor a következő Webcímen volt elérhető, mely természetesen megváltozhatott: http://msdn.microsoft.com/webservices/building/wse/default.aspx.
Letöltve az állományt (Web Services Enhancements 1.0 for Microsoft .NET.msi) telepítenünk kell a .NET Framework alá. Az öntelepítő állomány erről gondoskodik, a használható .DLL állomány (Microsoft.Web.Services.dll), és a kapcsolódó dokumentáció alapértelmezésben a következő mappába kerül: %winroot%:\Program Files\Microsoft WSE\v1.0.2312\.
A telepített assembly bekerül a globális assembly-listába, így amikor referenciaként megadjuk alkalmazásainkban, akkor a globális palettáról kell kiválasztanunk, nem pedig valamilyen alternatív mappából.
Tanúsítványgenerálás
A Visual Studio.NET parancssori eszközét, a MAKECERT.EXE alkalmazást használjuk fel erre a célra. A program a VS.NET telepítése után a <winroot>:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Bin mappában található, 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 gyakorlati példa felhasználása előtt generálunk egy tanúsítványt, melyet felhasználunk a WSEService nevű szerviz alkalmazásunk eléréséhez, a SOAP üzenet hitelesítéséhez. A generált tanúsítvány minden szempontból megfelelő lesz. A tanúsítványt tartalmazó állomány neve testCert.cer lesz, a tanúsítvány menedzserprogramban megjelenő neve pedig CN=VSCert. Létrehozásához a következő opciókkal indítottuk el a MAKECERT.EXE alkalmazás:
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 tanúsítvány állományán duplát kattintva annak jellemzői betöltődnek, és megtekinthetők. A „Tanúsítvány telepítése” gombra kattintva installálhatjuk a tanúsítványt. Ekkor megjelenik egy panel, melyen meg kell adnunk, hogy mely tárolóban szeretnénk tárolni az adott dokumentumot.
Tanúsítványok nyilvántartása Windows XP-ben
A tanúsítványok, melyek telepítve vannak a számítógépen, megtekinthetők egy program segítségével, melynek beállításait azonban manuálisan kell elvégezni. El kell indítanunk a Microsoft Management Console alkalmazást. Futtassuk azt parancssorból a mmc kulcsszó megadásával.
A File menüben válasszuk a Beépülő modul hozzáadása/eltávolítása gombot.
A megjelenő panelen nyomja meg a Hozzáadás gombot, majd a megjelenő listában válassza ki a Tanúsítványok elemet, hogy a kétfajta tárolót (CurrentUser és LocalMachine) hozzáadhassuk a konzolhoz.
Az üzenetablak három rádiógombot tartalmaz. Ezek közül először az elsőt (Saját felhasználói fiókom), majd a harmadikat kell kiválasztani (Számítógépfiók). A Hozzáadás gombbal adhatja őket a listához.
Az utóbbi esetben még egy panel jelenik meg, mely megkérdezi, hogy a lokális számítógépet adjuk-e a listához, vagy egy távoli gépet. Az első rádiógombot kell megadnunk.
Végül az OK gomb megnyomásával bezárhatjuk az ablakokat, és a Konzolban két Tanúsítványfiókot láthatunk. Annak érdekében, hogy ezek menüből is elérhetőek legyenek, el kell mentenünk a Konzolt. Ehhez a File menü Mentés pontját kell választanunk, és egy tetszőleges nevet megadnunk.
Ellenkező esetben minden alkalommal, amikor meg akarjuk nézni a tanúsítványtárolókat, a fenti műveletsort el kell végeznünk.
Üzenet hitelesítése
A WSEClient Windows-os alkalmazásban a WSEService alkalmazás AddNumbers metódusát hívjuk meg úgy, hogy a kérés üzenetét hitelesítjük a létrehozott, és telepített VSCert (vagy egy tetszőleges nevű) tanúsítvánnyal.
Az Add Reference gomb lenyomásával egy web referencia kerül hozzáadásra a projektünkhöz, mely egy az adott domain név nevű mappán belül jön létre, ami jelen esetben a localhost. Ezen belül megtaláljuk a szerviz felhasználásához szükséges Reference.cs forráskódot, melyet a WSDL nevű segédprogrammal is létrehozhattunk volna.
A hitelesítés használatához a proxy osztályban módosításokat kell eszközölni. Nevezetesen a WService osztályt a WebServicesClientProtocol osztályból kell származtatni.
public class WService : WebServicesClientProtocol
{
...
}
Ennek megfelelően a forrás elején meg kell adnunk a következő hivatkozást, hogy elérjük a Microsoft.Web.Services.dll osztályait:
using Microsoft.Web.Services;
A kliens Form-ján a gomb lenyomása után példányosítjuk a proxy osztályt.
WService proxy = new WService();
A kérés objektumát kérdezzük le következő lépésként.
SoapContext rContext = proxy.RequestSoapContext;
Majd a GetSecurityToken metódus segítségével megkeressük a létrehozott tanúsítványt, és kinyerjük belőle a biztonsági kódokat.
X509SecurityToken token = GetSecurityToken();
...
Elhelyezzük azokat egy kérés Token kollekciójában.
rContext.Security.Tokens.Add(token);
Adunk egy aláírást is a kéréshez.
rContext.Security.Elements.Add(new Signature(token));
Majd meghívjuk a szerviz metódusát.
textBox3.Text = proxy.AddNumbers(a,b);
A tanúsítványunk a CurrentUser tárolóban található, így azt a tárolót böngésszük végig a tanúsítvány felkutatására. Ehhez a X509CertificateStore osztályra van szükségünk, melyet olvasásra megnyitunk.
X509SecurityToken securityToken;
X509CertificateStore store = X509CertificateStore.CurrentUserStore(X509CertificateStore.RootStore);
store.OpenRead();
Megkeressük a megadott nevű (CN=VSCert) tanúsítványt, majd az azt reprezentáló objektumot feldolgozzuk.
for(int i=0;i<certs.Count;i++)
{
if (certs[i].GetName() == textBox4.Text)
{
cert = certs[i];
}
}
...
A feldolgozáskor kinyerjük a kulcsazonosítót, majd létrehozunk egy X509SecurityToken objektumot. A metódus ezzel tér vissza.
byte[] keyId = cert.GetKeyIdentifier();
securityToken = new X509SecurityToken(cert);
Üzenet értelmezése
A szerviz alkalmazás egyszerűbb, ott csak ellenőrizni kell csatolt hitelesítés adatait. Első lépésként a kérést határozzuk meg.
SoapContext rContext = HttpSoapContext.RequestContext;
A kérést átadva paraméterként meghívjuk az IsValid metódust, melyben kihámozzuk a hitelesítő információ lényegét.
Signature signature = cont.Security.Elements[i] as Signature;
...
X509SecurityToken x509token = signature.SecurityToken as X509SecurityToken;
A művelethez a szerviz alkalmazás Web.config állományában el kell helyezni a következő sorokat:
<webServices>
<soapExtensionTypes>
<add type="Microsoft.Web.Services.WebServicesExtension, Microsoft.Web.Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" priority="1" group="0" />
</soapExtensionTypes>
</webServices>
A konfigurációs bejegyzéseknek egy sorban kell lenniük, ellenkező esetben a feldolgozó hibát jelez.