У меня есть приложение-клиент WCF, которое использует безопасную связь между двумя компьютерами, и я хочу использовать сертификаты x509, установленные в хранилище сертификатов, для идентификации сервера и клиента друг с другом.Я делаю это, настраивая привязку как <security authenticationMode="MutualCertificate"/>
.Есть только клиентский компьютер.
На сервере есть сертификат, выданный server.mydomain.com, установленный в локальном компьютере / личном хранилище, и у клиента есть сертификат, выданный client.mydomain.com, установленный в том же месте.,В дополнение к этому у сервера есть общедоступный сертификат клиента в «Локальный компьютер / доверенные люди», а у клиента есть общедоступный сертификат сервера в «Локальный компьютер / доверенные люди».
Наконец, клиент настроен для проверки сертификата сервера.Я сделал это с помощью элемента system.servicemodel/behaviors/endpointBehaviors/clientCredentials/serviceCertificate/defaultCertificate
в файле конфигурации.
Пока все хорошо, все это работает.Моя проблема заключается в том, что я хочу указать в файле конфигурации сервера, что только клиенты, которые идентифицируют себя с сертификатом client.mydomain.com из хранилища сертификатов доверенных лиц, могут подключаться.
Правильная информация доступна насервер использует ServiceSecurityContext
, но я ищу способ указать в app.config, что WCF должен выполнять эту проверку вместо необходимости проверять контекст безопасности из кода.
Возможно ли это?Любые советы будут оценены.
Кстати, файл конфигурации моего сервера до сих пор выглядит так:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="MyServer.Server" behaviorConfiguration="CertificateBehavior">
<endpoint contract="Contracts.IMyService" binding="customBinding" bindingConfiguration="SecureConfig">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost/SecureWcf"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CertificateBehavior">
<serviceCredentials>
<serviceCertificate storeLocation="LocalMachine" x509FindType="FindBySubjectName" findValue="server.mydomain.com"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="SecureConfig">
<security authenticationMode="MutualCertificate"/>
<httpTransport/>
</binding>
</customBinding>
</bindings>
</system.serviceModel>
</configuration>