Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a minta bemutatja, hogyan implementálhat egyéni jogcím-engedélyezési szabályzatot és egy társított egyéni szolgáltatás-engedélyezési kezelőt. Ez akkor hasznos, ha a szolgáltatás jogcímalapú hozzáférés-ellenőrzéseket végez a szolgáltatásműveletekhez, és a hozzáférés-ellenőrzések előtt bizonyos jogosultságokat biztosít a hívónak. Ez a minta bemutatja a jogcímek hozzáadásának folyamatát, valamint a hozzáférés-ellenőrzés folyamatát a véglegesített jogcímkészleten. Az ügyfél és a kiszolgáló közötti összes alkalmazásüzenet aláírt és titkosított. A kötéssel alapértelmezés szerint az wsHttpBinding ügyfél által megadott felhasználónév és jelszó használatával lehet bejelentkezni egy érvényes Windows-fiókba. Ez a minta bemutatja, hogyan használható egyéni UserNamePasswordValidator az ügyfél hitelesítésére. Ez a minta azt is mutatja, hogy az ügyfél X.509-tanúsítvány használatával hitelesíti a szolgáltatást. Ez a minta egy implementációt IAuthorizationPolicyServiceAuthorizationManagermutat be, amely közöttük adott felhasználók számára biztosít hozzáférést a szolgáltatás meghatározott módszereihez. Ez a minta az üzenetbiztonsági felhasználónéven alapul, de bemutatja, hogyan hajthat végre jogcímátalakítást a ServiceAuthorizationManager hívás előtt.
Megjegyzés:
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.
Összefoglalva ez a minta bemutatja, hogyan:
Az ügyfél felhasználóneves jelszóval hitelesíthető.
Az ügyfél egy X.509-tanúsítvánnyal hitelesíthető.
A kiszolgáló ellenőrzi az ügyfél hitelesítő adatait egy egyéni
UsernamePasswordérvényesítőn.A kiszolgáló hitelesítése a kiszolgáló X.509-tanúsítványával történik.
A kiszolgáló ServiceAuthorizationManager -t használhat a szolgáltatás bizonyos metódusaihoz való hozzáférés szabályozására.
Hogyan lehet implementálni IAuthorizationPolicy.
A szolgáltatás két végpontot tesz elérhetővé a szolgáltatással való kommunikációhoz, a App.configkonfigurációs fájllal definiálva. Minden végpont egy címből, egy kötésből és egy szerződésből áll. Egy kötés egy szabványos wsHttpBinding kötéssel van konfigurálva, amely WS-Security és ügyfélnév-hitelesítést használ. A másik kötés egy standard wsHttpBinding kötéssel van konfigurálva, amely WS-Security és ügyféltanúsítvány-hitelesítést használ. A <viselkedés> azt határozza meg, hogy a felhasználói hitelesítő adatokat a szolgáltatáshitelesítéshez kell használni. A kiszolgálótanúsítványnak ugyanazt az értéket kell tartalmaznia a SubjectName tulajdonsághoz, mint a findValue<serviceCertificate> attribútuma.
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<!-- configure base address provided by host -->
<add baseAddress ="http://localhost:8001/servicemodelsamples/service"/>
</baseAddresses>
</host>
<!-- use base address provided by host, provide two endpoints -->
<endpoint address="username"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<endpoint address="certificate"
binding="wsHttpBinding"
bindingConfiguration="Binding2"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services>
<bindings>
<wsHttpBinding>
<!-- Username binding -->
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
<!-- X509 certificate binding -->
<binding name="Binding2">
<security mode="Message">
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior" >
<serviceDebug includeExceptionDetailInFaults ="true" />
<serviceCredentials>
<!--
The serviceCredentials behavior allows one to specify a custom validator for username/password combinations.
-->
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Microsoft.ServiceModel.Samples.MyCustomUserNameValidator, service" />
<!--
The serviceCredentials behavior allows one to specify authentication constraints on client certificates.
-->
<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>
<!--
The serviceCredentials behavior allows one to define a service certificate.
A service certificate is used by a client to authenticate the service and provide message protection.
This configuration references the "localhost" certificate installed during the setup instructions.
-->
<serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</serviceCredentials>
<serviceAuthorization serviceAuthorizationManagerType="Microsoft.ServiceModel.Samples.MyServiceAuthorizationManager, service">
<!--
The serviceAuthorization behavior allows one to specify custom authorization policies.
-->
<authorizationPolicies>
<add policyType="Microsoft.ServiceModel.Samples.CustomAuthorizationPolicy.MyAuthorizationPolicy, PolicyLibrary" />
</authorizationPolicies>
</serviceAuthorization>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Minden ügyfélvégpont-konfiguráció egy konfigurációs névből, a szolgáltatásvégpont abszolút címéből, a kötésből és a szerződésből áll. Az ügyfélkötés az ebben az esetben a biztonságban<> megadott és clientCredentialType az <üzenetben> megadott biztonsági móddal van konfigurálva.
<system.serviceModel>
<client>
<!-- Username based endpoint -->
<endpoint name="Username"
address="http://localhost:8001/servicemodelsamples/service/username"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
behaviorConfiguration="ClientCertificateBehavior"
contract="Microsoft.ServiceModel.Samples.ICalculator" >
</endpoint>
<!-- X509 certificate based endpoint -->
<endpoint name="Certificate"
address="http://localhost:8001/servicemodelsamples/service/certificate"
binding="wsHttpBinding"
bindingConfiguration="Binding2"
behaviorConfiguration="ClientCertificateBehavior"
contract="Microsoft.ServiceModel.Samples.ICalculator">
</endpoint>
</client>
<bindings>
<wsHttpBinding>
<!-- Username binding -->
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
<!-- X509 certificate binding -->
<binding name="Binding2">
<security mode="Message">
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<behavior name="ClientCertificateBehavior">
<clientCredentials>
<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 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" />
</serviceCertificate>
</clientCredentials>
</behavior>
</behaviors>
</system.serviceModel>
A felhasználónévalapú végpont esetében az ügyfél implementációja beállítja a használni kívánt felhasználónevet és jelszót.
// Create a client with Username endpoint configuration
CalculatorClient client1 = new CalculatorClient("Username");
client1.ClientCredentials.UserName.UserName = "test1";
client1.ClientCredentials.UserName.Password = "1tset";
try
{
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client1.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
...
}
catch (Exception e)
{
Console.WriteLine("Call failed : {0}", e.Message);
}
client1.Close();
A tanúsítványalapú végpont esetében az ügyfél-implementáció beállítja az ügyféltanúsítvány használatát.
// Create a client with Certificate endpoint configuration
CalculatorClient client2 = new CalculatorClient("Certificate");
client2.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "test1");
try
{
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client2.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
...
}
catch (Exception e)
{
Console.WriteLine("Call failed : {0}", e.Message);
}
client2.Close();
Ez a minta egyéni UserNamePasswordValidator módon ellenőrzi a felhasználóneveket és jelszavakat. A minta a MyCustomUserNamePasswordValidator származtatva a UserNamePasswordValidator-ból implementálja. További információkért tekintse meg a dokumentációt UserNamePasswordValidator . Az egyéni érvényesítő minta a UserNamePasswordValidator integráció bemutatásához implementálja a Validate módszert arra, hogy elfogadja azokat a felhasználónév/jelszó párokat, ahol a felhasználónév megegyezik a jelszóval, ahogyan az az alábbi kódban látható.
public class MyCustomUserNamePasswordValidator : UserNamePasswordValidator
{
// This method validates users. It allows in two users,
// test1 and test2 with passwords 1tset and 2tset respectively.
// This code is for illustration purposes only and
// MUST NOT be used in a production environment because it
// is NOT secure.
public override void Validate(string userName, string password)
{
if (null == userName || null == password)
{
throw new ArgumentNullException();
}
if (!(userName == "test1" && password == "1tset") && !(userName == "test2" && password == "2tset"))
{
throw new SecurityTokenException("Unknown Username or Password");
}
}
}
Miután az érvényesítő implementálva lett a szolgáltatási kódban, értesíteni kell a szolgáltatásgazdát a használni kívánt érvényesítő példányról. Ez a következő kóddal történik:
Servicehost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
serviceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new MyCustomUserNamePasswordValidatorProvider();
Vagy ugyanezt is megteheti a konfigurációban:
<behavior>
<serviceCredentials>
<!--
The serviceCredentials behavior allows one to specify a custom validator for username/password combinations.
-->
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Microsoft.ServiceModel.Samples.MyCustomUserNameValidator, service" />
...
</serviceCredentials>
</behavior>
A Windows Communication Foundation (WCF) gazdag jogcímalapú modellt biztosít a hozzáférés-ellenőrzések végrehajtásához. Az ServiceAuthorizationManager objektum a hozzáférés-ellenőrzés végrehajtására szolgál, és megállapítja, hogy az ügyfélhez társított jogcímek megfelelnek-e a szolgáltatás metódushoz való hozzáféréshez szükséges követelményeknek.
A bemutató céljából ez a minta egy olyan implementációt ServiceAuthorizationManager mutat be, amely implementálja azt a CheckAccessCore módszert, amely lehetővé teszi a felhasználó hozzáférését a metódusokhoz olyan típusú http://example.com/claims/allowedoperation jogcímek alapján, amelyek értéke a meghívható művelet műveleti URI-ja.
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
string action = operationContext.RequestContext.RequestMessage.Headers.Action;
Console.WriteLine("action: {0}", action);
foreach(ClaimSet cs in operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets)
{
if ( cs.Issuer == ClaimSet.System )
{
foreach (Claim c in cs.FindClaims("http://example.com/claims/allowedoperation", Rights.PossessProperty))
{
Console.WriteLine("resource: {0}", c.Resource.ToString());
if (action == c.Resource.ToString())
return true;
}
}
}
return false;
}
}
Az egyéni ServiceAuthorizationManager beállítás implementálása után a szolgáltatás gazdagépét tájékoztatni kell a ServiceAuthorizationManager használatról. Ez az alábbi kódban látható módon történik.
<behavior>
...
<serviceAuthorization serviceAuthorizationManagerType="Microsoft.ServiceModel.Samples.MyServiceAuthorizationManager, service">
...
</serviceAuthorization>
</behavior>
A megvalósítás elsődleges IAuthorizationPolicy módszere a Evaluate(EvaluationContext, Object) metódus.
public class MyAuthorizationPolicy : IAuthorizationPolicy
{
string id;
public MyAuthorizationPolicy()
{
id = Guid.NewGuid().ToString();
}
public bool Evaluate(EvaluationContext evaluationContext,
ref object state)
{
bool bRet = false;
CustomAuthState customstate = null;
if (state == null)
{
customstate = new CustomAuthState();
state = customstate;
}
else
customstate = (CustomAuthState)state;
Console.WriteLine("In Evaluate");
if (!customstate.ClaimsAdded)
{
IList<Claim> claims = new List<Claim>();
foreach (ClaimSet cs in evaluationContext.ClaimSets)
foreach (Claim c in cs.FindClaims(ClaimTypes.Name,
Rights.PossessProperty))
foreach (string s in
GetAllowedOpList(c.Resource.ToString()))
{
claims.Add(new
Claim("http://example.com/claims/allowedoperation",
s, Rights.PossessProperty));
Console.WriteLine("Claim added {0}", s);
}
evaluationContext.AddClaimSet(this,
new DefaultClaimSet(this.Issuer,claims));
customstate.ClaimsAdded = true;
bRet = true;
}
else
{
bRet = true;
}
return bRet;
}
...
}
Az előző kód bemutatja, hogyan ellenőrzi a Evaluate(EvaluationContext, Object) metódus, hogy nem lettek-e olyan új jogcímek hozzáadva, amelyek befolyásolják a feldolgozást, és hogyan adnak hozzá konkrét jogcímeket. Az engedélyezett jogcímek a GetAllowedOpList metódusból származnak, amely a felhasználó által végrehajtható műveletek meghatározott listájának visszaadására van implementálva. Az engedélyezési szabályzat jogcímeket ad hozzá az adott művelethez való hozzáféréshez. Ezt később a ServiceAuthorizationManager hozzáférés-ellenőrzési döntések végrehajtására használják.
Az egyéni IAuthorizationPolicy beállítás implementálása után a szolgáltatás gazdagépét tájékoztatni kell a használni kívánt engedélyezési szabályzatokról.
<serviceAuthorization>
<authorizationPolicies>
<add policyType='Microsoft.ServiceModel.Samples.CustomAuthorizationPolicy.MyAuthorizationPolicy, PolicyLibrary' />
</authorizationPolicies>
</serviceAuthorization>
A minta futtatásakor a műveleti kérelmek és a válaszok megjelennek az ügyfélkonzol ablakában. Az ügyfél sikeresen meghívja a Hozzáadás, kivonás és több metódust, és "Hozzáférés megtagadva" üzenet jelenik meg a Divide metódus meghívásakor. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.
Batch-fájl beállítása
A mintában szereplő Setup.bat kötegfájl lehetővé teszi a kiszolgáló megfelelő tanúsítványokkal való konfigurálását egy olyan saját üzemeltetésű alkalmazás futtatásához, amely kiszolgálói tanúsítványalapú biztonságot igényel.
Az alábbiak rövid áttekintést nyújtanak a kötegfájlok különböző szakaszairól, hogy a megfelelő konfigurációban való futtatásukhoz módosíthatók legyenek:
A 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. A %SERVER_NAME% változó megadja a kiszolgáló nevét. Módosítsa ezt a változót a saját kiszolgáló nevének megadásához. Az alapértelmezett érték a localhost.
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 kiszolgálótanúsítvány telepítése az ügyfél megbízható tanúsítványtárolójába.
A Setup.bat kötegfájl alábbi sorai átmásolják a szerver tanúsítványt az ügyfél megbízható személyek tárhelyébe. 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 TrustedPeopleAz ügyféltanú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 ügyféltanúsítványt. A %USER_NAME% változó megadja a kiszolgáló nevét. Ez az érték a "test1" értékre van állítva, mert ez a név, amelyet a
IAuthorizationPolicyrendszer keres. Ha módosítja a %USER_NAME% értékét, a metódus megfelelő értékét kell módosítaniaIAuthorizationPolicy.Evaluate.A tanúsítvány a Saját (Személyes) tárolóban, a CurrentUser tároló helyé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 Setup.bat kötegfájl sorai az alábbiak szerint másolják az ügyféltanúsítványt a megbízható személyek tárolójába. Erre a lépésre azért van szükség, mert a Makecert.exe által létrehozott tanúsítványokat a kiszolgálórendszer nem implicit módon megbízhatónak minősíti. Ha már rendelkezik olyan tanúsítvánnyal, amely egy megbízható főtanúsítványban gyökerezik – például egy Microsoft által kiadott tanúsítványban –, nem szükséges a kiszolgálói tanúsítványtároló ügyféltanúsítvánnyal való feltöltésének ez a lépése.
certmgr.exe -add -r CurrentUser -s My -c -n %CLIENT_NAME% -r LocalMachine -s TrustedPeople
A minta beállítása és létrehozása
A megoldás létrehozásához kövesse a Windows Communication Foundation-minták készítésére vonatkozó utasításokat.
A minta egy- vagy számítógépközi konfigurációban való futtatásához kövesse az alábbi utasításokat.
Megjegyzés:
Ha a Svcutil.exe használatával hozza létre újra a minta konfigurációját, mindenképpen módosítsa az ügyfélkonfiguráció végpontnevét az ügyfélkódnak megfelelően.
A minta futtatása ugyanazon a számítógépen
Nyissa meg a Visual Studio fejlesztői parancssorát rendszergazdai jogosultságokkal, és futtassa aSetup.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.
Megjegyzés:
A Setup.bat kötegfájl úgy lett kialakítva, hogy a Visual Studio fejlesztői parancssorából fusson. A Visual Studio fejlesztői parancssorában beállított PATH környezeti változó a Setup.bat szkript által igényelt végrehajtható fájlokat tartalmazó könyvtárra mutat.
Indítsa el a Service.exe a service\bin fájlból.
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.
Másolja a szolgáltatásprogram fájljait a \service\bin fájlból a szolgáltatásszámítógép könyvtárába. Másolja a Setup.bat, Cleanup.bat, GetComputerName.vbs és ImportClientCert.bat fájlokat 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.
Futtassa
setup.bat servicea kiszolgálón a Visual Studio fejlesztői parancssorában, amely rendszergazdai jogosultságokkal van megnyitva.A
setup.batargumentummal futtatva aservicelétrehoz egy szolgáltatási tanúsítványt a számítógép teljes tartománynevével, majd exportálja a szolgáltatási tanúsítványt egy Service.cer nevű fájlba.Szerkessze Service.exe.config , hogy tükrözze az új tanúsítványnevet (a
findValue<serviceCertificate> attribútumban), amely megegyezik a számítógép teljes tartománynevével. A szolgáltatás /<baseAddresses> elemében módosítsa a < a localhostról a szolgáltatógép teljesen minősített nevére is.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 clienta Visual Studio fejlesztői parancssorában rendszergazdai jogosultságokkal megnyitva.Az argumentummal futtatva
setup.batclientlétrehoz egy teszt1 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ó teljesen minősített 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, amely rendszergazdai jogosultságokkal van megnyitva.
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, amely rendszergazdai jogosultságokkal van megnyitva.
Ez importálja az ügyféltanúsítványt a Client.cer fájlból a LocalMachine – TrustedPeople tárolóba.
Indítsa el a Service.exe a kiszolgáló számítógépén a parancssori ablakban.
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.
Tisztítás a minta után
A minta futtatása után futtassa a Cleanup.bat parancsot a mintamappában a tisztításhoz. Ezzel eltávolítja a kiszolgáló- és ügyféltanúsítványokat a tanúsítványtárolóból.
Megjegyzés:
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 olyan 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.