Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A MessageSecurity-minta bemutatja, hogyan implementálhat olyan alkalmazást, amely az X.509 v3-tanúsítványhitelesítést használó WS-Security használ az ügyfél számára, és a kiszolgáló X.509 v3 tanúsítványával igényel kiszolgálói hitelesítést. Ez a minta olyan alapértelmezett beállításokat használ, amelyek az ügyfél és a kiszolgáló közötti összes alkalmazásüzenetet aláírják és titkosítják. Ez a minta a WSHttpBinding alapul, és egy ügyfélkonzol-programból és az Internet Information Services (IIS) által üzemeltetett szolgáltatástárból áll. A szolgáltatás megvalósít egy szerződést, amely egy kérés-válasz kommunikációs mintát határoz meg.
Jegyzet
A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.
A minta bemutatja, hogyan szabályozható a hitelesítés konfigurációval, és hogyan szerezheti be a hívó identitását a biztonsági környezetből, ahogyan az az alábbi mintakódban is látható.
public class CalculatorService : ICalculator
{
public string GetCallerIdentity()
{
// The client certificate is not mapped to a Windows identity by default.
// ServiceSecurityContext.PrimaryIdentity is populated based on the information
// in the certificate that the client used to authenticate itself to the service.
return ServiceSecurityContext.Current.PrimaryIdentity.Name;
}
...
}
A szolgáltatás egy végpontot tesz elérhetővé a szolgáltatással való kommunikációhoz, és egy végpontot, amely a szolgáltatás WSDL-dokumentumát a WS-MetadataExchange protokoll használatával teszi közzé, amelyet a konfigurációs fájl (Web.config) használatával határoz meg. A végpont egy címből, egy kötésből és egy szerződésből áll. A kötés egy szabványos <wsHttpBinding>-elemmel van konfigurálva, amely alapértelmezés szerint az üzenetbiztonságot használja. Ez a minta a clientCredentialType attribútumot tanúsítványra állítja, hogy ügyfél-hitelesítést igényeljen.
<system.serviceModel>
<protocolMapping>
<add scheme="http" binding="wsHttpBinding"/>
</protocolMapping>
<bindings>
<wsHttpBinding>
<!--
This configuration defines the security mode as Message and
the clientCredentialType as Certificate.
-->
<binding>
<security mode ="Message">
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
<!--
The serviceCredentials behavior allows one to define a service certificate.
A service certificate is used by the service to authenticate itself to its clients and to provide message protection.
This configuration references the "localhost" certificate installed during the setup instructions.
-->
<serviceCredentials>
<serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
<clientCertificate>
<!--
Setting the certificateValidationMode to PeerOrChainTrust means that if the certificate
is in the user's Trusted People store, then it will be trusted without performing a
validation of the certificate's issuer chain. This setting is used here for convenience so that the
sample can be run without having to have certificates issued by a certification authority (CA).
This setting is less secure than the default, ChainTrust. The security implications of this
setting should be carefully considered before using PeerOrChainTrust in production code.
-->
<authentication certificateValidationMode="PeerOrChainTrust" />
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
A viselkedés megadja a szolgáltatás hitelesítő adatait, amelyeket az ügyfél a szolgáltatás hitelesítésekor használ. A kiszolgálótanúsítvány tulajdonosának neve a findValue elem < attribútumában van megadva.
<!--For debugging purposes, set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
<!--
The serviceCredentials behavior allows one to define a service certificate.
A service certificate is used by the service to authenticate itself to its clients and to provide message protection.
This configuration references the "localhost" certificate installed during the setup instructions.
-->
<serviceCredentials>
<serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
<clientCertificate>
<!--
Setting the certificateValidationMode to PeerOrChainTrust means that if the certificate
is in the user's Trusted People store, then it will be trusted without performing a
validation of the certificate's issuer chain. This setting is used here for convenience so that the
sample can be run without having to have certificates issued by a certification authority (CA).
This setting is less secure than the default, ChainTrust. The security implications of this
setting should be carefully considered before using PeerOrChainTrust in production code.
-->
<authentication certificateValidationMode="PeerOrChainTrust" />
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Az ügyfélvégpont konfigurációja a szolgáltatásvégpont, a kötés és a szerződés abszolút címéből áll. Az ügyfélkötés a megfelelő biztonsági és hitelesítési móddal van konfigurálva. Számítógépközi forgatókönyv esetén győződjön meg arról, hogy a szolgáltatásvégpont címe ennek megfelelően módosul.
<system.serviceModel>
<client>
<!-- Use a behavior to configure the client certificate to present to the service. -->
<endpoint address="http://localhost/servicemodelsamples/service.svc" binding="wsHttpBinding" bindingConfiguration="Binding1" behaviorConfiguration="ClientCertificateBehavior" contract="Microsoft.Samples.Certificate.ICalculator"/>
</client>
<bindings>
<wsHttpBinding>
<!--
This configuration defines the security mode as Message and
the clientCredentialType as Certificate.
-->
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
...
</system.serviceModel>
Az ügyfél implementációja beállíthatja a tanúsítvány használatát a konfigurációs fájlon vagy a kódon keresztül. Az alábbi minta bemutatja, hogyan állíthatja be a tanúsítványt a konfigurációs fájlban való használatra.
<system.serviceModel>
...
<behaviors>
<endpointBehaviors>
<behavior name="ClientCertificateBehavior">
<!--
The clientCredentials behavior allows one to define a certificate to present to a service.
A certificate is used by a client to authenticate itself to the service and provide message integrity.
This configuration references the "client.com" certificate installed during the setup instructions.
-->
<clientCredentials>
<clientCertificate findValue="client.com" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName"/>
<serviceCertificate>
<!--
Setting the certificateValidationMode to PeerOrChainTrust means that if the certificate
is in the user's Trusted People store, then it will be trusted without performing a
validation of the certificate's issuer chain. This setting is used here for convenience so that the
sample can be run without having to have certificates issued by a certificate authority (CA).
This setting is less secure than the default, ChainTrust. The security implications of this
setting should be carefully considered before using PeerOrChainTrust in production code.
-->
<authentication certificateValidationMode="PeerOrChainTrust"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Az alábbi minta bemutatja, hogyan hívhatja meg a szolgáltatást a programban.
// Create a client.
CalculatorClient client = new CalculatorClient();
// Call the GetCallerIdentity service operation.
Console.WriteLine(client.GetCallerIdentity());
...
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
A minta futtatásakor a műveleti kérelmek és a válaszok megjelennek az ügyfélkonzol ablakában. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.
CN=client.com
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
Az Üzenetbiztonsági minták Setup.bat kötegfájlja lehetővé teszi az ügyfél és a kiszolgáló megfelelő tanúsítványokkal való konfigurálását egy olyan üzemeltetett alkalmazás futtatásához, amely tanúsítványalapú biztonságot igényel. A kötegfájl három módban futtatható. Egyszámítógépes módban való futtatáshoz írja be, hogy setup.bat a Visual Studio fejlesztői parancssorában; szolgáltatás módban való futtatáshoz írja be, hogy setup.bat szolgáltatás; ügyfél módban való futtatáshoz pedig írja be, hogy setup.bat ügyfél. A minta számítógépek közötti futtatásakor használja az ügyfél- és kiszolgálómódot. A részletekért tekintse meg a témakör végén található beállítási eljárást. Az alábbiakban röviden áttekintheti a kötegfájlok különböző szakaszait, hogy azok a megfelelő konfigurációban való futtatásukhoz módosíthatók legyenek:
Az ügyféltanúsítvány létrehozása.
A kötegfájl következő sora hozza létre az ügyféltanúsítványt. A megadott ügyfélnevet használják a létrehozott tanúsítvány tárgyneveként. A tanúsítvány a
Mytárolóban, aCurrentUsertároló helyszínén található.echo ************ echo making client cert echo ************ makecert.exe -sr CurrentUser -ss MY -a sha1 -n CN=%CLIENT_NAME% -sky exchange -peAz ügyféltanúsítvány telepítése a kiszolgáló megbízható tanúsítványtárolójába.
A kötegfájl következő sora átmásolja az ügyféltanúsítványt a kiszolgáló TrustedPeople tárolójába, hogy a kiszolgáló meghozhassa a megfelelő megbízhatósági vagy nem megbízhatósági döntéseket. Ahhoz, hogy a TrustedPeople áruházban telepített tanúsítványt egy Windows Communication Foundation (WCF) szolgáltatás megbízhatónak minősítse, az ügyféltanúsítvány-érvényesítési módot
PeerOrChainTrustvagyPeerTrustkell beállítani. Tekintse meg az előző szolgáltatáskonfigurációs mintát, amelyből megtudhatja, hogyan teheti ezt meg egy konfigurációs fájl használatával.echo ************ echo copying client cert to server's LocalMachine store echo ************ certmgr.exe -add -r CurrentUser -s My -c -n %CLIENT_NAME% -r LocalMachine -s TrustedPeopleA kiszolgálótanúsítvány létrehozása.
A Setup.bat kötegfájl alábbi sorai hozzák létre a használni kívánt kiszolgálótanúsítványt.
echo ************ echo Server cert setup starting echo %SERVER_NAME% echo ************ echo making server cert echo ************ makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -peA %SERVER_NAME% változó megadja a kiszolgáló nevét. A tanúsítvány tárolása a LocalMachine áruházban történik. Ha a Setup.bat kötegfájl egy szolgáltatás argumentummal (például setup.bat szolgáltatás) fut, a %SERVER_NAME% tartalmazza a számítógép teljes tartománynevét. Ellenkező esetben alapértelmezés szerint a localhost lesz.
A kiszolgálótanúsítvány telepítése az ügyfél megbízható tanúsítványtárolójába.
Az alábbi sor a kiszolgálótanúsítványt az ügyfél megbízható személyek tárolójába másolja. Erre a lépésre azért van szükség, mert a Makecert.exe által létrehozott tanúsítványokat az ügyfélrendszer nem implicit módon megbízhatónak minősíti. Ha már rendelkezik olyan tanúsítvánnyal, amely egy ügyfél megbízható főtanúsítványában gyökerezik – például egy Microsoft által kiadott tanúsítványban –, nem szükséges az ügyféltanúsítvány-tároló kiszolgálótanúsítvánnyal való feltöltésének ez a lépése.
certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeopleEngedélyek megadása a tanúsítvány titkos kulcsához.
A Setup.bat fájl alábbi sorai elérhetővé teszik a LocalMachine tárolóban tárolt kiszolgálói tanúsítványt a ASP.NET feldolgozói folyamatfiók számára.
echo ************ echo setting privileges on server certificates echo ************ for /F "delims=" %%i in ('"%ProgramFiles%\ServiceModelSampleTools\FindPrivateKey.exe" My LocalMachine -n CN^=%SERVER_NAME% -a') do set PRIVATE_KEY_FILE=%%i set WP_ACCOUNT=NT AUTHORITY\NETWORK SERVICE (ver | findstr /C:"5.1") && set WP_ACCOUNT=%COMPUTERNAME%\ASPNET echo Y|cacls.exe "%PRIVATE_KEY_FILE%" /E /G "%WP_ACCOUNT%":R iisresetJegyzet
Ha a Windows egy nem amerikai angol kiadását használja, szerkesztenie kell a Setup.bat fájlt, és az "NT AUTHORITY\NETWORK SERVICE" fiók nevét le kell cserélnie az adott régióra vonatkozó megfelelőjére.
Jegyzet
A kötegfájlban használt eszközök a C:\Program Files\Microsoft Visual Studio 8\Common7\tools vagy a C:\Program Files\Microsoft SDKs\Windows\v6.0\bin fájlban találhatók. Az egyik könyvtárnak szerepelnie kell a rendszer elérési útjában. Ha telepítve van a Visual Studio, a legegyszerűbben úgy érheti el ezt a könyvtárat az elérési úton, ha megnyitja a Visual Studio fejlesztői parancssorát. Kattintson a Start, majd a Minden program, Visual Studio 2012, Eszközökelemre. Ez a parancssor már konfigurálta a megfelelő elérési utakat. Ellenkező esetben manuálisan kell hozzáadnia a megfelelő könyvtárat az elérési úthoz.
A minta beállítása, összeállítása és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.
A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.
A minta futtatása ugyanazon a számítógépen
Nyisson meg egy fejlesztői parancssort a Visual Studióhoz rendszergazdai jogosultságokkal, és futtassa a Setup.bat a minta telepítési mappából. Ez telepíti a minta futtatásához szükséges összes tanúsítványt.
Jegyzet
A Setup.bat kötegfájl úgy lett kialakítva, hogy a Visual Studióhoz készült fejlesztői parancssorból fusson. Megköveteli, hogy az elérési út környezeti változója arra a könyvtárra mutasson, amelyben az SDK telepítve van. Ez a környezeti változó automatikusan be van állítva a Visual Studio fejlesztői parancssorában (2010).
Ellenőrizze a szolgáltatáshoz való hozzáférést egy böngészőben a cím
http://localhost/servicemodelsamples/service.svcmegadásával.Indítsa el a Client.exe a \client\bin fájlból. Az ügyféltevékenység megjelenik az ügyfélkonzol-alkalmazásban.
Ha az ügyfél és a szolgáltatás nem tud kommunikálni, tekintse meg a WCF minták hibaelhárítási tippeket a éscímsorok alatt.
A minta futtatása számítógépeken
Hozzon létre egy könyvtárat a szolgáltatásszámítógépen. Hozzon létre egy servicemodelsamples nevű virtuális alkalmazást ehhez a könyvtárhoz az Internet Information Services (IIS) felügyeleti eszközével.
Másolja a szolgáltatásprogram fájljait az \inetpub\wwwroot\servicemodelsamples fájlból a szolgáltatásszámítógép virtuális könyvtárába. Győződjön meg arról, hogy a \bin alkönyvtárban lévő fájlokat másolja. Másolja a Setup.bat, Cleanup.batés ImportClientCert.bat fájlokat is a szolgáltatásszámítógépre.
Hozzon létre egy könyvtárat az ügyfélszámítógépen az ügyfél bináris fájljaihoz.
Másolja az ügyfélprogram fájljait az ügyfélszámítógép ügyfélkönyvtárába. Másolja a Setup.bat, Cleanup.batés ImportServiceCert.bat fájlokat is az ügyfélbe.
A kiszolgálón futtassa setup.bat szolgáltatás a Visual Studio fejlesztői parancssorában rendszergazdai jogosultságokkal. A szolgáltatás argumentummal futtatott setup.bat létrehoz egy szolgáltatástanúsítványt a számítógép teljes tartománynevével, és exportálja a szolgáltatástanúsítványt egy Service.cer nevű fájlba.
Szerkessze a Web.config-et, hogy tükrözze az új tanúsítvány nevét (a
findValue< attribútumában), amely megegyezik a számítógép teljes tartománynevével.Másolja a Service.cer fájlt a szolgáltatáskönyvtárból az ügyfélszámítógép ügyfélkönyvtárába.
Az ügyfélen futtassa setup.bat ügyfél a Visual Studio fejlesztői parancssorában rendszergazdai jogosultságokkal. Az ügyfél argumentummal futtatott setup.bat létrehoz egy client.com nevű ügyféltanúsítványt, és exportálja az ügyféltanúsítványt egy Client.cer nevű fájlba.
Az ügyfélszámítógép Client.exe.config fájljában módosítsa a végpont címértékét úgy, hogy az megfeleljen a szolgáltatás új címének. Ehhez cserélje le a localhostot a kiszolgáló teljes tartománynevére.
Másolja a Client.cer fájlt az ügyfélkönyvtárból a kiszolgáló szolgáltatáskönyvtárába.
Az ügyfélen futtassa a ImportServiceCert.bat a Visual Studio fejlesztői parancssorában rendszergazdai jogosultságokkal. Ez importálja a szolgáltatástanúsítványt a Service.cer fájlból a CurrentUser – TrustedPeople tárolóba.
A kiszolgálón futtassa a ImportClientCert.bat a Visual Studio fejlesztői parancssorában rendszergazdai jogosultságokkal. Ez importálja az ügyféltanúsítványt a Client.cer fájlból a LocalMachine – TrustedPeople áruházba.
Az ügyfélszámítógépen indítsa el a Client.exe egy parancssori ablakból. Ha az ügyfél és a szolgáltatás nem tud kommunikálni, tekintse meg a WCF minták hibaelhárítási tippeket a éscímsorok alatt.
A minta utáni tisztítás
Miután befejezte a minta futtatását, futtassa a Cleanup.bat-t a mintamappában.
Jegyzet
Ez a szkript nem távolítja el az ügyfél szolgáltatástanúsítványait, amikor a mintát számítógépeken futtatja. Ha windowsos kommunikációs alap (WCF) mintákat futtat, amelyek tanúsítványokat használnak a számítógépeken, mindenképpen törölje a CurrentUser – TrustedPeople áruházban telepített szolgáltatástanúsítványokat. Ehhez használja a következő parancsot:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>Például:certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.