Мне удалось настроить безопасность транспорта WCF для нашего веб-сервиса входа в систему, используя самозаверяющий сертификат, выданный локальному хосту. Я добавил самоподписанный сертификат в качестве доверенного корневого центра сертификации, чтобы IE не стонал о недоверенных сертификатах. При тестировании на localhost все работает нормально, и поскольку мы используем localhost, это также позволяет всем разработчикам без проблем протестировать сервис со своих компьютеров.
Однако сейчас я пытаюсь заставить это работать на нашем сервере удаленного тестирования. При запуске на удаленном сервере сертификат localhost, очевидно, больше не будет работать. Поэтому я создал самозаверяющий тестовый сертификат для серверного компьютера с использованием IIS7 и настроил IIS для использования этого сертификата для связи https на веб-сайте. Я также добавил это в хранилище доверенных корневых сертификатов сервера. Затем я изменяю конфигурацию поведения WCF-сервера на теперь , а не , ищите сертификат localhost больше, но чтобы найти его, связанный с DNS-именем машины, как показано ниже:
<behavior name="SSL">
<serviceCredentials>
<serviceCertificate
findValue="prods-build.mydomain.co.za"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
Это поведение затем связывается со службой входа в систему в файле web.config:
<service behaviorConfiguration="SSL" name="Pragma.OnKey.Services.Common.LogonService">
<endpoint address="" bindingConfiguration="pragmaSSL" binding="basicHttpBinding" name="Silverlight" contract="Pragma.OnKey.Services.Common.ILogonService" />
</service>
Для справки я также включил используемую конфигурацию привязки:
<binding name="pragmaSSL">
<security mode="Transport"/>
</binding>
Когда я запускаю тест из браузера, используя полное доменное имя на самом сервере, все работает нормально. Fiddler показывает HTTPS-соединение, устанавливаемое для вызова веб-службы входа в систему. Однако, как только я пытаюсь выполнить тот же тест, используя полное доменное имя с удаленной машины, я получаю обычную ошибку «Ошибка при попытке сделать запрос к URI https://myserver/Services/Logon.svc ..check clientaccesspolicy.xml» , Clientaccesspolicy.xml (см. Ниже) находится в корневой папке веб-сайта, и помните, что все это прекрасно работает до Я пытаюсь получить доступ к службе удаленно, используя полное имя DNS.
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPACTION">
<domain uri="http://*"/>
<domain uri="https://*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
Итак, мой вопрос: что я делаю не так? Какую часть этой головоломки мне не хватает? Как я могу протестировать реализацию SSL на удаленном компьютере, используя самозаверяющий тестовый сертификат и клиент Silverlight?
Помните, что все это прекрасно работает, используя самозаверяющий сертификат, назначенный для localhost . Однако мне нужно запустить его для тестирования нашего приложения в наших средах тестирования и подготовки.
Спасибо
Carel