Ukázka zabezpečení zpráv
Ukázka MessageSecurity ukazuje, jak implementovat aplikaci, která používá basicHttpBinding
zabezpečení a zabezpečení zpráv. Tato ukázka vychází ze služby Začínáme , která implementuje službu kalkulačky.
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Režim basicHttpBinding
zabezpečení lze nastavit na následující hodnoty: Message
, Transport
, TransportWithMessageCredential
TransportCredentialOnly
a None
. V následujícím ukázkovém souboru App.config služby určuje basicHttpBinding
definice koncového bodu konfiguraci vazby s názvem Binding1
a odkazuje na ji, jak je znázorněno v následující ukázkové konfiguraci:
<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>
Konfigurace vazby nastaví mode
atribut< zabezpečení> a Message
nastaví clientCredentialType
atribut <zprávy> tak, jak Certificate
je znázorněno v následující ukázkové konfiguraci:
<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>
Certifikát, který služba používá k ověření klienta, je nastaven v části chování konfiguračního souboru pod elementem serviceCredentials
. Režim ověřování, který se vztahuje na certifikát, který klient používá k ověření ve službě, je také nastaven v části chování pod prvkem clientCertificate
.
<!--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>
V konfiguračním souboru klienta jsou zadané stejné podrobnosti o vazbě a zabezpečení.
Identita volajícího se zobrazí v okně konzoly služby pomocí následujícího kódu:
Console.WriteLine("Called by {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
Při spuštění ukázky se požadavky na operace a odpovědi zobrazí v okně konzoly klienta. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.
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.
Nastavení a sestavení ukázky
Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.
Spuštění ukázky na stejném počítači
Spusťte Setup.bat z ukázkové instalační složky. Tím se nainstalují všechny certifikáty potřebné pro spuštění ukázky.
Poznámka:
Dávkový soubor Setup.bat je navržený tak, aby běžel z příkazového řádku sady Windows SDK. Vyžaduje, aby proměnná prostředí MSSDK odkazovala na adresář, ve kterém je sada SDK nainstalovaná. Tato proměnná prostředí se automaticky nastaví v příkazovém řádku sady Windows SDK.
Spusťte aplikaci služby z \service\bin.
Spusťte klientskou aplikaci z \client\bin. Aktivita klienta se zobrazí v aplikaci konzoly klienta.
Pokud klient a služba nemůžou komunikovat, přečtěte si téma Řešení potíží Tipy pro ukázky WCF.
Po dokončení ukázky odeberte certifikáty spuštěním Cleanup.bat. Jiné ukázky zabezpečení používají stejné certifikáty.
Spuštění ukázky napříč počítači
Vytvořte adresář na počítači služby pro binární soubory služby.
Zkopírujte soubory programu služby do adresáře služby na serveru. Zkopírujte také soubory Setup.bat, Cleanup.bat a ImportClientCert.bat na server.
Vytvořte adresář na klientském počítači pro binární soubory klienta.
Zkopírujte soubory klientského programu do klientského adresáře na klientském počítači. Zkopírujte také soubory Setup.bat, Cleanup.bat a ImportServiceCert.bat do klienta.
Na serveru spusťte
setup.bat service
příkaz . Spuštěnísetup.bat
s argumentemservice
vytvoří certifikát služby s plně kvalifikovaným názvem domény počítače a exportuje certifikát služby do souboru s názvem Service.cer.Upravte Service.exe.config tak, aby odrážel nový název certifikátu (v
findValue
atributu v elementu <serviceCertificate> ), který je stejný jako plně kvalifikovaný název domény počítače. Změňte také hodnotu základní adresy tak, aby se místo localhost zadal plně kvalifikovaný název počítače..
Zkopírujte soubor Service.cer z adresáře služby do klientského adresáře na klientském počítači.
Na klientovi spusťte
setup.bat client
příkaz . Spuštěnísetup.bat
s argumentemclient
vytvoří klientský certifikát s názvem client.com a exportuje klientský certifikát do souboru s názvem Client.cer.V souboru Client.exe.config na klientském počítači změňte hodnotu adresy koncového bodu tak, aby odpovídala nové adrese vaší služby. Provedete to tak, že nahradíte localhost plně kvalifikovaným názvem domény serveru. Změňte
findValue
také atribut <defaultCertificate> na nový název certifikátu služby, což je plně kvalifikovaný název domény serveru.Zkopírujte soubor Client.cer z klientského adresáře do adresáře služby na serveru.
Na klientovi spusťte ImportServiceCert.bat. Tím se certifikát služby naimportuje ze souboru Service.cer do úložiště CurrentUser – Trusted Lidé.
Na serveru spusťte ImportClientCert.bat. Tím se naimportuje klientský certifikát ze souboru Client.cer do úložiště LocalMachine – Trusted Lidé.
Na počítači služby spusťte Service.exe z příkazového řádku.
Na klientském počítači spusťte Client.exe z okna příkazového řádku.
- Pokud klient a služba nemůžou komunikovat, přečtěte si téma Řešení potíží Tipy pro ukázky WCF.
Vyčištění po ukázce
Po dokončení spuštění ukázky spusťte Cleanup.bat ve složce s ukázkami.
Poznámka:
Tento skript při spuštění této ukázky na počítačích neodebere certifikáty služeb v klientovi. Pokud jste spustili ukázky wcf (Windows Communication Foundation), které používají certifikáty napříč počítači, nezapomeňte vymazat certifikáty služby nainstalované v úložišti CurrentUser – Trusted Lidé. K tomu použijte následující příkaz:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>
Například:certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com