Megosztás:


Üzenetbiztonsági minta

A MessageSecurity minta bemutatja, hogyan implementálhat egy olyan alkalmazást, amely az basicHttpBinding üzenetbiztonságot használja. Ez a minta a számológép szolgáltatást megvalósító Első lépések részen alapul.

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.

A biztonsági mód basicHttpBinding a következő értékekre állítható be: Message, Transport, TransportWithMessageCredentialTransportCredentialOnly és None. A következő mintaszolgáltatás App.config fájlban a végpontdefiníció meghatározza a basicHttpBinding végpontot, és hivatkozik egy Binding1 nevű kötéskonfigurációra, ahogyan az a következő mintakonfigurációban látható.

<system.serviceModel>
  <services>
    <service name="Microsoft.ServiceModel.Samples.CalculatorService"
             behaviorConfiguration="CalculatorServiceBehavior">
     <!-- This endpoint is exposed at the base address provided by -->
     <!-- host: http://localhost:8000/ServiceModelSamples/service.-->
     <endpoint address=""
               binding="basicHttpBinding"
               bindingConfiguration="Binding1"
               contract="Microsoft.ServiceModel.Samples.ICalculator" />
    </service>
  </services>
  ...
</system.serviceModel>

A kötéskonfiguráció beállítja a mode< attribútumát a > értékre, és az Message attribútumát a clientCredentialType értékre, ahogyan az alábbi mintakonfigurációban látható.

<bindings>
  <basicHttpBinding>
    <!--
        This configuration defines the SecurityMode as Message and
        the clientCredentialType as Certificate.
        -->
    <binding name="Binding1" >
      <security mode = "Message">
        <message clientCredentialType="Certificate"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

A szolgáltatás által az ügyfél felé történő hitelesítéshez használt tanúsítvány az elem alatti serviceCredentials konfigurációs fájl viselkedési szakaszában van beállítva. Az ügyfél által a szolgáltatásban való hitelesítéshez használt tanúsítványra vonatkozó érvényesítési mód az elem viselkedési szakaszában clientCertificate is be van állítva.

<!--For debugging purposes, set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
      <!--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. -->
      <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 is -->
          <!-- 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>

Ugyanazokat a kötési és biztonsági adatokat adja meg az ügyfélkonfigurációs fájl.

A hívó identitása a következő kóddal jelenik meg a szolgáltatáskonzol ablakában:

Console.WriteLine("Called by {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);

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.

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.

A minta beállítása és létrehozása

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

  2. 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 gépen

  1. A Setup.bat futtatása 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 van kialakítva, hogy windowsos SDK parancssorból fusson. Ehhez az MSSDK környezeti változónak arra a könyvtárra kell mutatnia, amelyben az SDK telepítve van. Ez a környezeti változó automatikusan be van állítva egy Windows SDK parancssorban.

  2. Futtassa a szolgáltatásalkalmazást a \service\bin fájlból.

  3. Futtassa az ügyfélalkalmazást a \client\bin könyvtárból. Az ügyféltevékenység megjelenik az ügyfélkonzol-alkalmazásban.

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

  5. Távolítsa el a tanúsítványokat a Cleanup.bat futtatásával, amikor befejezte a mintát. Más biztonsági minták ugyanazokat a tanúsítványokat használják.

A minta futtatása gépeken

  1. Hozzon létre egy címtárat a szolgáltatásgépen a szolgáltatás bináris fájljaihoz.

  2. Másolja a szolgáltatásprogram fájljait a kiszolgáló szolgáltatáskönyvtárába. Másolja a Setup.bat, Cleanup.batés ImportClientCert.bat fájlokat is a kiszolgálóra.

  3. Hozzon létre egy könyvtárat az ügyfélgépen az ügyfél bináris fájljaihoz.

  4. Másolja az ügyfélprogram fájljait az ügyfélgép ügyfélkönyvtárába. Másolja a Setup.bat, Cleanup.batés ImportServiceCert.bat fájlokat is az ügyfélbe.

  5. Futtassa a setup.bat servicea kiszolgálón. A setup.bat programot a service argumentummal futtatva létrehoz egy szolgáltatástanúsítványt a gép teljesen minősített tartománynevével, és exportálja azt egy Service.cer nevű fájlba.

  6. Szerkessze a Service.exe.config-t úgy, hogy tükrözze az új tanúsítványnevet (amely a findValue attribútumban található a <serviceCertificate> elemnél), és amely megegyezik a gép teljes minősített tartománynevével. Módosítsa az alapcím értékét úgy is, hogy a localhost helyett teljes gépnevet adjon meg.

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

  8. Kliens oldalon futtassa a setup.bat client. A setup.bat argumentummal futtatott client 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.

  9. 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. Ezt úgy teheti meg, hogy lecseréli a localhostot a kiszolgáló teljesen minősített tartománynevére. Módosítsa az findValue<alapértelmezett tanúsítvány attribútumot> az új szolgáltatástanúsítvány nevére is, amely a kiszolgáló teljesen minősített tartományneve.

  10. Másolja a Client.cer fájlt az ügyfélkönyvtárból a kiszolgáló szolgáltatáskönyvtárába.

  11. Az ügyfélen futtassa a ImportServiceCert.bat. Ez importálja a szolgáltatástanúsítványt a Service.cer fájlból a CurrentUser – TrustedPeople tárolóba.

  12. A kiszolgálón futtassa a ImportClientCert.bat, Ez importálja az ügyféltanúsítványt a Client.cer fájlból a LocalMachine – TrustedPeople tárolóba.

  13. A szolgáltatási gépen futtassa a Service.exe parancsot parancssorból.

  14. Az ügyfélszámítógépen indítsa el a Client.exe egy parancssori ablakból.

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

  • A minta végrehajtása után futtassa le a mintamappában lévő Cleanup.bat-t.

    Megjegyzés:

    Ez a szkript nem távolítja el a szolgáltatástanúsítványokat az ügyfélen, amikor a mintát gépeken futtatja. Ha windowsos kommunikációs alap (WCF) mintákat futtat, amelyek különböző gépeken használnak tanúsítványokat, 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