2013-06-22 3 views
0

У меня есть три различных службы WCF, развернутых на сервере отдельно, там есть собственный каталог приложений в разделе «Веб-сайты по умолчанию» в IIS. Одна из служб развертывается мной, а еще две другие службы развертываются другим клиентом. В IIS есть один сертификат сервера, с которым я связываю свою службу.Хостинг нескольких служб WCF с единым сертификатом

Но когда я пытаюсь получить доступ к моей службе формы HTTPS я получаю эту ошибку во всплывающем окне:..

"Адреса Несовместимость Сертификат безопасности этого сайтом был выпущен для другого адреса веба-сайта Этой проблема может указывают на вас пытаются обмануть или хотят перехватить информацию, передаваемую на сервер. "

Thee файл web.config моей службы заключается в следующем

<configuration> 
<system.web> 
<compilation debug="true" targetFramework="4.0" /> 
<identity impersonate="false" /> 
</system.web> 

<system.serviceModel> 
<services> 
    <service name="WcfApp.Service">  

    <endpoint address="customer" 
       binding="basicHttpBinding" 
       bindingConfiguration="secureHttpBinding" 
       contract="WCFApp.ICustomerService" />   

    <endpoint address="order" 
       binding="basicHttpBinding" 
       bindingConfiguration="secureHttpBinding" 
       contract="WcfApp.IOrderService" /> 

    <endpoint address="mex" 
       binding="mexHttpsBinding" 
       contract="IMetadataExchange" /> 

    </service> 
</services> 

<bindings> 
    <basicHttpBinding> 
    <binding name="secureHttpBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<behaviors> 
    <serviceBehaviors> 
    <behavior > 
     <serviceMetadata httpsGetEnabled="True" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceThrottling maxConcurrentCalls="21" maxConcurrentSessions="50" />   
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
<system.webServer> 
<directoryBrowse enabled="true" /> 
<validation validateIntegratedModeConfiguration="false" /> 
</system.webServer> 
</configuration> 

Интересно то, что, когда я попал в следующий URL: https://myserverurl.com/applicationfolder/service.svc?wsdl

, чтобы получить WSDL, он отлично работает и возвращает мне описание WSDL, но первоначальный вызов не работает.

Почему я получаю «Несоответствующий адрес»? Нужно ли добавлять базовый адрес хоста? если да, как и где именно добавить его в web.config, и нужно ли его добавлять в других двух сервисах wcf? Разве порт конфликтует с сертификатом? Я новичок в wcf, пожалуйста, помогите мне решить эту проблему?

Я использую .net 4.0, IIS 7.0, Windows Server 2008.

Спасибо заранее.

ответ

0

В сообщении об ошибке указано (в основном), что сертификат, который вы используете для своего сайта, не соответствует имени DNS, которое используется (из браузера клиента) для подключения к сайту.

Я предполагаю, что вы внедряете виртуальный хостинг; то есть несколько служб с разными именами DNS, которые обслуживаются из одного экземпляра IIS. Это не сработает ... если вы не используете другой сертификат для каждой службы или используете сертификат wild-card, соответствующий всем DNS-именам службы.

Видимо, виртуальный хостинг SSL на основе имени не поддерживается IIS до 7.0. This article описывает, как настроить его для IIS 7.0. Но обратите внимание, что имена в соответствующих сертификатах должны совпадают с соответствующими именами виртуальных хостов ...


Обратите внимание, что требование должны совпадать с именем хост и сертификаты имеет основополагающее значение для безопасности SSL. Это то, что позволяет браузеру/пользователю знать, что он разговаривает с ожидаемым сервером (на основе имени DNS), а не каким-либо сайтом-импостером.