Я пытался настроить безопасность транспорта WCF с использованием SSL на IIS6.
Клиент находится на отдельном компьютере в том же домене.
Я понимаю предпосылку сертификатов,root CA и т. д., имеют рабочий набор сертификатов для защиты сообщений и могут использовать эти пробники в одной и той же среде.(Я не многому научился за последнюю неделю:)
Мне приснился кошмар, когда я пытаюсь заставить моего клиента проходить аутентификацию на службе IIS 6, когда я переключаю его на SSL.Всегда получая «анонимная аутентификация не разрешена» при вызове.
В IIS у меня есть
- корневой сертификат CA, установленный на сайте для SSL-порта 443 (если я просматриваю https:// страница svc я вижу замок IE, и на странице написано, что вам нужен сертификат для связи)
при защищенной связи у меня
- требуется SSL-канал
- требуется 128-битное шифрование
- требуется клиентские сертификаты
- включить сопоставление клиентских сертификатов (настроено сопоставление «много к 1» с учетной записью администратора в поле IIS, для которого теперь сопоставлены субъекты сертификата)Поле O)
в режиме безопасности веб-сайта (проверка подлинности и контроль доступа)
- Анонимный доступ = ВКЛ.
- Встроенная проверка подлинности Windows = ВЫКЛ.
- basic Authentication = ON
Для клиента wsHttpBinding у меня есть сертификат, готовый для аутентификации, и пользовательское поведение конечной точки для предоставления этой информации, но я не думаю, что она получает этодалеко!
ОБНОВЛЕННЫЙ КОНФИГ СЕРВЕРА
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="CertificateWithTransport">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="WCFServiceCertificate.Service1" behaviorConfiguration="credentialConfig">
<endpoint address="https://svnvmig02/Service1.svc"
binding="wsHttpBinding"
bindingConfiguration="CertificateWithTransport"
contract="WCFServiceCertificate.IService1">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="credentialConfig">
<serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
ОБНОВЛЕННЫЙ КОНФИГ КЛИЕНТА
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IService1">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://svnvmig02/Service1.svc" binding="wsHttpBinding" behaviorConfiguration="CustomBehavior"
bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
name="WSHttpBinding_IService1">
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="CustomBehavior">
<clientCredentials>
<clientCertificate findValue="svnvmig02" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/>
<serviceCertificate>
<authentication certificateValidationMode="PeerTrust"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
РЕДАКТИРОВАТЬ: Вероятно, стоит упомянуть, что мои проекты VS 3.5, но IIS6 работает .net4
С измененным конфигом (спасибо Fabio;) я могу теперь IE просматривать адрес https://svnvmig01/Service1.svc с клиентского компьютера и видетьсгенерированная svc-страница, которая позволяет мне нажимать на wsdl URl, который также доступен.
Большинство страниц, которые я нашел в сети, относятся к самострахованию или IIS7 .... Я надеюсь, что поддержка IIS7лучше;)
Любая помощь будет принята с благодарностью:)