Delen via


Autorisatiebeleid

In dit voorbeeld ziet u hoe u een aangepast claimautorisatiebeleid en een gekoppeld aangepast serviceautorisatiebeheer implementeert. Dit is handig wanneer de service op claim gebaseerde toegangscontroles uitvoert op servicebewerkingen en voorafgaand aan de toegangscontroles bepaalde rechten verleent aan de beller. In dit voorbeeld ziet u zowel het proces voor het toevoegen van claims als het proces voor het uitvoeren van een toegangscontrole op basis van de voltooide set claims. Alle toepassingsberichten tussen de client en server worden ondertekend en versleuteld. Bij de wsHttpBinding binding worden standaard een gebruikersnaam en wachtwoord die door de client worden opgegeven, gebruikt om u aan temelden bij een geldig Windows-account. In dit voorbeeld ziet u hoe u een aangepaste UserNamePasswordValidator toepassing gebruikt om de client te verifiëren. Daarnaast laat dit voorbeeld zien hoe de client wordt geverifieerd bij de service met behulp van een X.509-certificaat. In dit voorbeeld ziet u een implementatie van IAuthorizationPolicy en ServiceAuthorizationManager, die ertussen toegang verlenen tot specifieke methoden van de service voor specifieke gebruikers. Dit voorbeeld is gebaseerd op de gebruikersnaam van de berichtbeveiliging, maar laat zien hoe u een claimtransformatie uitvoert voordat de ServiceAuthorizationManager aangeroepen.

Notitie

De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.

Kortom, in dit voorbeeld ziet u hoe:

  • De client kan worden geverifieerd met behulp van een gebruikersnaam-wachtwoord.

  • De client kan worden geverifieerd met behulp van een X.509-certificaat.

  • De server valideert de clientreferenties op basis van een aangepaste UsernamePassword validator.

  • De server wordt geverifieerd met het X.509-certificaat van de server.

  • De server kan de toegang tot bepaalde methoden in de service beheren ServiceAuthorizationManager .

  • Hoe te implementeren IAuthorizationPolicy.

De service maakt twee eindpunten beschikbaar voor communicatie met de service, gedefinieerd met behulp van het configuratiebestand App.config. Elk eindpunt bestaat uit een adres, een binding en een contract. Eén binding wordt geconfigureerd met een standaardbinding wsHttpBinding die gebruikmaakt van verificatie van WS-Security en clientgebruikersnamen. De andere binding wordt geconfigureerd met een standaardbinding wsHttpBinding die gebruikmaakt van WS-Security- en clientcertificaatverificatie. Het <gedrag> geeft aan dat de gebruikersreferenties moeten worden gebruikt voor serviceverificatie. Het servercertificaat moet dezelfde waarde voor de SubjectName eigenschap bevatten als het findValue kenmerk in serviceCertificate<>.

<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>

Elke configuratie van het clienteindpunt bestaat uit een configuratienaam, een absoluut adres voor het service-eindpunt, de binding en het contract. De clientbinding wordt geconfigureerd met de juiste beveiligingsmodus, zoals opgegeven in dit geval in de <beveiliging> en clientCredentialType zoals opgegeven in het <bericht>.

<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>

Voor het eindpunt op basis van gebruikersnaam stelt de client-implementatie de gebruikersnaam en het wachtwoord in die moeten worden gebruikt.

// 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();

Voor het eindpunt op basis van certificaten stelt de client-implementatie het clientcertificaat in dat moet worden gebruikt.

// 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();

In dit voorbeeld wordt een aangepaste methode UserNamePasswordValidator gebruikt om gebruikersnamen en wachtwoorden te valideren. Het voorbeeld implementeert MyCustomUserNamePasswordValidator, afgeleid van UserNamePasswordValidator. Zie de documentatie voor UserNamePasswordValidator meer informatie. Voor het demonstreren van de integratie met het UserNamePasswordValidatorvoorbeeld implementeert dit voorbeeld van een aangepaste validator de methode voor het Validate accepteren van gebruikersnaam-/wachtwoordparen waarbij de gebruikersnaam overeenkomt met het wachtwoord, zoals wordt weergegeven in de volgende code.

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");
    }
  }
}

Zodra de validator is geïmplementeerd in de servicecode, moet de servicehost worden geïnformeerd over het validator-exemplaar dat moet worden gebruikt. Dit gebeurt met behulp van de volgende code:

Servicehost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
serviceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new MyCustomUserNamePasswordValidatorProvider();

Of u kunt hetzelfde doen in de configuratie:

<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>

Windows Communication Foundation (WCF) biedt een uitgebreid model op basis van claims voor het uitvoeren van toegangscontroles. Het ServiceAuthorizationManager object wordt gebruikt om de toegangscontrole uit te voeren en te bepalen of de claims die aan de client zijn gekoppeld, voldoen aan de vereisten die nodig zijn voor toegang tot de servicemethode.

Ter demonstratie toont dit voorbeeld een implementatie van ServiceAuthorizationManager die de methode implementeert om de CheckAccessCore toegang van een gebruiker tot methoden toe te staan op basis van claims van het type http://example.com/claims/allowedoperation waarvan de waarde de actie-URI is van de bewerking die mag worden aangeroepen.

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;
  }
}

Zodra de aangepaste ServiceAuthorizationManager app is geïmplementeerd, moet de servicehost worden geïnformeerd over het ServiceAuthorizationManager te gebruiken gebruik. Dit wordt gedaan zoals wordt weergegeven in de volgende code.

<behavior>
    ...
    <serviceAuthorization serviceAuthorizationManagerType="Microsoft.ServiceModel.Samples.MyServiceAuthorizationManager, service">
        ...
    </serviceAuthorization>
</behavior>

De primaire IAuthorizationPolicy methode die moet worden geïmplementeerd, is de Evaluate(EvaluationContext, Object) methode.

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;
     }
...
}

De vorige code laat zien hoe de Evaluate(EvaluationContext, Object) methode controleert of er geen nieuwe claims zijn toegevoegd die van invloed zijn op de verwerking en specifieke claims toevoegt. De claims die zijn toegestaan, worden verkregen uit de GetAllowedOpList methode, die wordt geïmplementeerd om een specifieke lijst met bewerkingen te retourneren die de gebruiker mag uitvoeren. Met het autorisatiebeleid worden claims toegevoegd voor toegang tot de specifieke bewerking. Dit wordt later gebruikt door de functie voor het ServiceAuthorizationManager uitvoeren van beslissingen voor toegangscontrole.

Zodra de aangepaste IAuthorizationPolicy code is geïmplementeerd, moet de servicehost worden geïnformeerd over het autorisatiebeleid dat moet worden gebruikt.

<serviceAuthorization>
       <authorizationPolicies>
            <add policyType='Microsoft.ServiceModel.Samples.CustomAuthorizationPolicy.MyAuthorizationPolicy, PolicyLibrary' />
       </authorizationPolicies>
</serviceAuthorization>

Wanneer u het voorbeeld uitvoert, worden de bewerkingsaanvragen en -antwoorden weergegeven in het clientconsolevenster. De client roept de methoden Toevoegen, Aftrekken en Meerdere aan en krijgt een bericht 'Toegang is geweigerd' wanneer de methode Divide wordt aangeroepen. Druk op Enter in het clientvenster om de client af te sluiten.

Batch-bestand instellen

Met het Setup.bat batchbestand dat is opgenomen in dit voorbeeld, kunt u de server configureren met relevante certificaten om een zelf-hostende toepassing uit te voeren waarvoor beveiliging op basis van servercertificaten is vereist.

Hieronder vindt u een kort overzicht van de verschillende secties van de batchbestanden, zodat ze kunnen worden gewijzigd om te worden uitgevoerd in de juiste configuratie:

  • Het servercertificaat maken.

    De volgende regels uit het Setup.bat batchbestand maken het servercertificaat dat moet worden gebruikt. De variabele %SERVER_NAME% geeft de servernaam op. Wijzig deze variabele om uw eigen servernaam op te geven. De standaardwaarde is 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 -pe
    
  • Het servercertificaat installeren in het vertrouwde certificaatarchief van de client.

    Met de volgende regels in het Setup.bat batchbestand kopieert u het servercertificaat naar het archief vertrouwde personen van de client. Deze stap is vereist omdat certificaten die worden gegenereerd door Makecert.exe niet impliciet worden vertrouwd door het clientsysteem. Als u al een certificaat hebt dat is geroot in een vertrouwd basiscertificaat van een client, bijvoorbeeld een door Microsoft uitgegeven certificaat, is deze stap van het vullen van het clientcertificaatarchief met het servercertificaat niet vereist.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople
    
  • Het clientcertificaat maken.

    Met de volgende regels uit het Setup.bat batchbestand maakt u het clientcertificaat dat moet worden gebruikt. De variabele %USER_NAME% geeft de servernaam op. Deze waarde is ingesteld op 'test1', omdat dit de naam is die wordt IAuthorizationPolicy gezocht. Als u de waarde van %USER_NAME% wijzigt, moet u de bijbehorende waarde in de IAuthorizationPolicy.Evaluate methode wijzigen.

    Het certificaat wordt opgeslagen in mijn (persoonlijke) archief onder de locatie van het CurrentUser-archief.

    echo ************
    echo making client cert
    echo ************
    makecert.exe -sr CurrentUser -ss MY -a sha1 -n CN=%CLIENT_NAME% -sky exchange -pe
    
  • Het clientcertificaat installeren in het vertrouwde certificaatarchief van de server.

    Met de volgende regels in het Setup.bat batchbestand kopieert u het clientcertificaat naar het archief met vertrouwde personen. Deze stap is vereist omdat certificaten die worden gegenereerd door Makecert.exe niet impliciet worden vertrouwd door het serversysteem. Als u al een certificaat hebt dat is geroot in een vertrouwd basiscertificaat, bijvoorbeeld een door Microsoft uitgegeven certificaat, is deze stap van het vullen van het servercertificaatarchief met het clientcertificaat niet vereist.

    certmgr.exe -add -r CurrentUser -s My -c -n %CLIENT_NAME% -r LocalMachine -s TrustedPeople
    

Het voorbeeld instellen en bouwen

  1. Volg de instructies in Het bouwen van de Windows Communication Foundation-voorbeelden om de oplossing te bouwen.

  2. Als u het voorbeeld wilt uitvoeren in een configuratie van één of meerdere computers, gebruikt u de volgende instructies.

Notitie

Als u Svcutil.exe gebruikt om de configuratie voor dit voorbeeld opnieuw te genereren, moet u de naam van het eindpunt in de clientconfiguratie wijzigen zodat deze overeenkomt met de clientcode.

Het voorbeeld uitvoeren op dezelfde computer

  1. Open de opdrachtprompt voor Ontwikkelaars voor Visual Studio met beheerdersbevoegdheden en voer Setup.bat uit vanuit de voorbeeldinstallatiemap. Hiermee worden alle certificaten geïnstalleerd die vereist zijn voor het uitvoeren van het voorbeeld.

    Notitie

    Het Setup.bat batchbestand is ontworpen om te worden uitgevoerd vanaf de opdrachtprompt voor Ontwikkelaars voor Visual Studio. De omgevingsvariabele PATH die is ingesteld in de opdrachtprompt voor ontwikkelaars voor Visual Studio verwijst naar de map die uitvoerbare bestanden bevat die vereist zijn voor het Setup.bat script.

  2. Start Service.exe vanuit service\bin.

  3. Start Client.exe vanuit \client\bin. Clientactiviteit wordt weergegeven in de clientconsoletoepassing.

Als de client en service niet kunnen communiceren, raadpleegt u Tips voor probleemoplossing voor WCF-voorbeelden.

Het voorbeeld uitvoeren op computers

  1. Maak een map op de servicecomputer.

  2. Kopieer de programmabestanden van de service van \service\bin naar de map op de servicecomputer. Kopieer ook de Setup.bat, Cleanup.bat, GetComputerName.vbs en ImportClientCert.bat bestanden naar de servicecomputer.

  3. Maak een map op de clientcomputer voor de binaire clientbestanden.

  4. Kopieer de clientprogrammabestanden naar de clientmap op de clientcomputer. Kopieer ook de bestanden Setup.bat, Cleanup.bat en ImportServiceCert.bat naar de client.

  5. Voer op de server uit setup.bat service in de opdrachtprompt voor ontwikkelaars voor Visual Studio die is geopend met beheerdersbevoegdheden.

    Als u het service argument uitvoertsetup.bat, maakt u een servicecertificaat met de volledig gekwalificeerde domeinnaam van de computer en exporteert u het servicecertificaat naar een bestand met de naam Service.cer.

  6. Bewerk Service.exe.config om de nieuwe certificaatnaam (in het findValue kenmerk in serviceCertificate <) weer te> geven. Dit is hetzelfde als de volledig gekwalificeerde domeinnaam van de computer. Wijzig ook de computernaam in het <element service>/<baseAddresses> van localhost in de volledig gekwalificeerde naam van uw servicecomputer.

  7. Kopieer het bestand Service.cer van de servicemap naar de clientmap op de clientcomputer.

  8. Voer op de client uit setup.bat client in de opdrachtprompt voor ontwikkelaars voor Visual Studio die is geopend met beheerdersbevoegdheden.

    Als u het argument uitvoert setup.bat , maakt u een clientcertificaat met de client naam test1 en exporteert u het clientcertificaat naar een bestand met de naam Client.cer.

  9. Wijzig in het bestand Client.exe.config op de clientcomputer de adreswaarde van het eindpunt zodat deze overeenkomt met het nieuwe adres van uw service. Doe dit door localhost te vervangen door de volledig gekwalificeerde domeinnaam van de server.

  10. Kopieer het Client.cer-bestand van de clientmap naar de servicemap op de server.

  11. Voer op de client ImportServiceCert.bat uit in de opdrachtprompt voor ontwikkelaars voor Visual Studio die is geopend met beheerdersbevoegdheden.

    Hiermee importeert u het servicecertificaat uit het Service.cer-bestand in het CurrentUser - Trusted Mensen-archief.

  12. Voer op de server ImportClientCert.bat uit in de opdrachtprompt voor ontwikkelaars voor Visual Studio die is geopend met beheerdersbevoegdheden.

    Hiermee importeert u het clientcertificaat uit het Client.cer-bestand in het LocalMachine - Trusted Mensen-archief.

  13. Start Service.exe op de servercomputer vanuit het opdrachtpromptvenster.

  14. Start Client.exe vanaf een opdrachtpromptvenster op de clientcomputer.

    Als de client en service niet kunnen communiceren, raadpleegt u Tips voor probleemoplossing voor WCF-voorbeelden.

Opschonen na het voorbeeld

Als u het voorbeeld wilt opschonen, voert u Cleanup.bat uit in de map met voorbeelden wanneer u klaar bent met het uitvoeren van het voorbeeld. Hiermee worden de server- en clientcertificaten uit het certificaatarchief verwijderd.

Notitie

Dit script verwijdert geen servicecertificaten op een client bij het uitvoeren van dit voorbeeld op computers. Als u WCF-voorbeelden hebt uitgevoerd die gebruikmaken van certificaten op computers, moet u de servicecertificaten wissen die zijn geïnstalleerd in het CurrentUser - Trusted Mensen-archief. Gebruik hiervoor de volgende opdracht: bijvoorbeeld: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.