Образец безопасности сообщений
Данный образец демонстрирует реализацию приложения, в котором используется привязка basicHttpBinding и безопасность сообщений. Данный образец основан на образце Образец для начала работы, реализующем службу калькулятора.
![]() |
---|
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела. |
Режим безопасности basicHttpBinding может быть установлен в следующие значения: Message, Transport, TransportWithMessageCredential, TransportCredentialOnly и None. В следующем образце файла службы App.config, в определении конечной точки задаются привязка basicHttpBinding и ссылки на конфигурацию привязки с именем Binding1
, как показано в следующем образце конфигурации.
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by -->
<!-- host: https://localhost:8000/ServiceModelSamples/service.-->
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services> …
</system.serviceModel>
Конфигурация привязки задает атрибуту mode элемента security Element in basicHttpBinding значение Message и задает атрибуту clientCredentialType элемента message Element in basicHttpBinding значение Certificate, как показано в следующем образце конфигурации.
<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>
Сертификат, используемый службой для проверки своей подлинности при подключении к клиенту, установлен в разделе поведений элемента serviceCredentials
файла конфигурации. Режим проверки, применяемый к сертификату, который клиент использует для проверки своей подлинности при подключении к службе, также задается в разделе поведений элемента 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 -->
<!-- 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" />
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Та же привязка и данные безопасности задаются в файле конфигурации клиента.
Идентификация абонента отображается в окне консоли службы с помощью следующего кода.
Console.WriteLine("Called by {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
При выполнении образца запросы и ответы операций отображаются в окне консоли клиента. Чтобы закрыть клиент, нажмите клавишу ВВОД в окне клиента.
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.
Настройка и построение образца
Убедитесь, что выполнены процедуры, описанные в разделе Процедура однократной настройки образцов Windows Communication Foundation.
Чтобы выполнить построение версии решения для языка C# или Visual Basic .NET, следуйте инструкциям раздела Построение образцов Windows Communication Foundation.
Выполнение образца на одном компьютере
Запустите файл Setup.bat из папки установки образца. При этом устанавливаются все сертификаты, необходимые для выполнения образца.
Примечание
Пакетный файл Setup.bat предназначен для запуска из командной строки Windows SDK. Требуется, чтобы переменная среды MSSDK указывала на каталог, в котором установлен пакет SDK. Эта переменная среды автоматически устанавливается в командной строке Windows SDK. Запустите приложение службы из \service\bin.
Запустите клиентское приложение из \service\bin. Действия клиента отображаются в консольном приложении клиента.
Если клиенту и службе не удается взаимодействовать, см. раздел Troubleshooting Tips.
После завершения работы образца запустите файл Cleanup.bat, чтобы удалить сертификаты. В других образцах обеспечения безопасности используются те же сертификаты.
Выполнение образца на нескольких компьютерах
Создайте на компьютере службы каталог для двоичных файлов службы.
Скопируйте файлы программ службы из каталога службы на сервер. Также скопируйте на сервер файлы Setup.bat, Cleanup.bat и ImportClientCert.bat.
Создайте на клиентском компьютере каталог для двоичных файлов клиента.
Скопируйте в клиентский каталог на клиентском компьютере файлы программы клиента. Кроме того, скопируйте на клиент файлы Setup.bat, Cleanup.bat и ImportServiceCert.bat.
На сервере выполните команду
setup.bat service
. При выполнении командыsetup.bat
с аргументомservice
создается сертификат службы с полным доменным именем компьютера, который экспортируется в файл с именем Service.cer.Внесите в файл Service.exe.config изменения в соответствии с новым именем сертификата (в атрибуте findValue элемента <serviceCertificate> of <serviceCredentials>), которое совпадает с полным доменным именем компьютера. Также измените значение базового адреса для указания полного доменного имени компьютера вместо localhost**.**
Скопируйте файл Service.cer из каталога службы в клиентский каталог на клиентском компьютере.
На клиенте выполните команду
setup.bat client
. При выполнении командыsetup.bat
с аргументомclient
создается сертификат клиента с именем client.com, который экспортируется в файл с именем Client.cer.В файле Client.exe.config на клиентском компьютере измените значение адреса конечной точки, чтобы оно соответствовало новому адресу службы. Для этого замените имя localhost полным доменным именем сервера. Также измените атрибутfindValue элемента <defaultCertificate> Element на имя нового сертификата, которое является полным доменным именем сервера.
Скопируйте файл Client.cer из клиентского каталога в каталог службы на сервере.
Запустите на клиенте файл ImportServiceCert.bat. Он импортирует сертификат службы из файла Service.cer в хранилище CurrentUser - TrustedPeople.
На сервере запустите файл ImportClientCert.bat. Он импортирует сертификат клиента из файла Client.cer в хранилище LocalMachine - TrustedPeople.
Запустите программу Service.exe из командной строки на компьютере службы.
На клиентском компьютере из окна командной строки запустите программу Client.exe.
- Если клиенту и службе не удается взаимодействовать, см. раздел Troubleshooting Tips.
Очистка после образца
После завершения работы образца запустите в папке образцов файл Cleanup.bat.
Примечание
Этот сценарий не удаляет сертификаты службы на клиенте при выполнении образца на нескольких компьютерах. Если образцы Windows Communication Foundation (WCF), в которых использовались сертификаты, выполнялись на нескольких компьютерах, обязательно удалите сертификаты службы, которые были установлены в хранилище «CurrentUser - TrustedPeople». Для этого воспользуйтесь командой certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>
. Например,certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com
.
![]() |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\WF_WCF_Samples
Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.
<диск_установки>:\WF_WCF_Samples\WCF\Basic\Binding\Basic\MessageSecurity
|