2015-04-09 4 views
0

У меня есть служба Wcf в VS 2010, .NET 4.0.Ошибка при настройке HTTPS в службе WCF

Сайт IIS - это виртуальный каталог.

Я пытаюсь настроить и доступ к нему с помощью протокола HTTPS

https://pruebaslba.xxxx.net/ServicioPyS/Service.svc?wsdl

Но я получаю ошибки

Could not find a base address that matches scheme https for the endpoint with binding WSHttpBinding. Registered base address schemes are [http]. 

или

Could not find a base address that matches scheme https for the endpoint with binding BasicHttpBinding. Registered base address schemes are [http]. 

Googleing, я видел несколько вариантов о конфигурациях: serviceMetadata , привязки, baseAddresses, ..

я попробовать различные конфигурации, но я получаю ту же ошибку:

serviceMetadata

<serviceMetadata httpGetEnabled="false or true" httpsGetEnabled="true" /> 

привязок

Я использую <security mode="Transport">

<bindings> 

     <basicHttpBinding> 
     <binding name="SecureTransportOnly"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
      </security> 
     </binding> 

     <binding name="NoSecure"> 
      <security mode="None"><transport clientCredentialType="None"/></security> 
     </binding> 

     </basicHttpBinding> 

     <wsHttpBinding> 
     <binding name="SecureTransportOnly"> 
      <security mode="Transport"> 
       <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
      </security> 
     </binding> 

     </wsHttpBinding> 
    </bindings> 

конечная точка

<endpoint 
      address="" 
      binding="basicHttpBinding" 
      bindingConfiguration="SecureTransportOnly" 
      name="xxxActualServiceEndPoint" 
      bindingNamespace="https://pruebaslba.xxxx.net/ServicioPyS" 
      contract="IxxxActualService"> 

MEX

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

И я перестарался:

<!--<host> 
      <baseAddresses> 
      <add baseAddress="https://pruebaslba.xxxx.net o https://pruebaslba.xxxx.net/ServicioPyS"/> 
      </baseAddresses> 
     </host>--> 

      <!--<identity> 
      <dns value="localhost" /> 
      </identity>--> 

Я пытался, я думаю, почти конфигурации, которые я нашел в форумах. Я не знаю решения.

ОБНОВЛЕНИЕ Получаю больше информации об этом. Веб-сайт находится на 2 серверах (среда предварительного производства): preiis01 и preiis02. SSL не включен.

Я могу получить доступ к http://preiis01/ServicioPyS/Service.svc?wsdl Все в порядке по http.

https://pruebaslba.xxxx.net/ServicioPyS/Service.svc?wsdl является общественным адресом о NLB (нагрузка сбалансирована, я думаю, F5). В NLB настроен SSL. Я не знаю больше информации, только ИТ-отдел имеет всю информацию.

Проблема о WSDL

http://preiis01/ServicioPyS/Service.svc?wsdl

<wsdl:service name="ActualService"> 

<wsdl:port name="ActualServiceEndPoint"binding="i0:ActualServiceEndPoint"> 

<soap:addresslocation="http://preiis01/ServicioPyS/Service.svc/Service.svc" /> 

</wsdl:port> 

</wsdl:service> 

URL WSDL в NLB еси проблема- с мыло: адрес места часть и не генерируется право (набор HTTP, а не HTTPS)

https://pruebaslba.xxxx.net/ServicioPyS/Service.svc?wsdl

<wsdl:service name="ActualService"> 

<wsdl:port name="ActualServiceEndPoint"binding="i0:ActualServiceEndPoint"> 

<soap:addresslocation="http://pruebaslba.xxxx.net/ServicioPyS/Service.svc/Service.svc" /> 

</wsdl:port> 

</wsdl:service> 

решение быстро было изменить вручную WSDL (SingleFile) и установите Https в мыло: addresslocation часть, в новом URL https://pruebaslba.xxxx.net/ServicioPyS/WSDL/ServiceWsdlModificado.Single.wsdl

https://pruebaslba.xxxx.net/ServicioPyS/WSDL/ServiceWsdlModificado.Single.wsdl

<wsdl:service name="ActualService"> 

<wsdl:port name="ActualServiceEndPoint"binding="tns:ActualServiceEndPoint"> 

<soap:addresslocation="https://pruebaslba.xxxx.net/ServicioPyS/Service.svc/Service.svc"/> 

</wsdl:port> 

    </wsdl:service> 

Я думаю, , есть еще одно хорошее решение с хорошей практикой. Я не знаю.

Веб-сайт в IIS не поддерживает SSL, а в NLB - SSL.

Может быть, «SSL сквозная», я не знаю

http://blog.tonysneed.com/2012/06/18/building-scalable-and-secure-wcf-services/

Есть предложения?

+0

Вы добавили привязку https для своего веб-сайта в IIS? – Thuan

+0

@Thuan SSL не включен на веб-сайте IIS. Только в NLB F5. Возможно, полезный SSL-проход, я не знаю об этом. Связывание сайтов *** http hostname: pruebaslba.xxxx.net и порт 80 ** - это URL-адрес NLB (Load Balanced, F5) *** – Kiquenet

ответ

0

Ошибка говорит о том, что ваш базовый адрес использует схему «http», когда ему нужно вместо этого использовать «https». При размещении в IIS адрес настраивается в IIS, а не в элементе hosts в config.

Это означает, что вам необходимо настроить SSL в IIS: http://www.iis.net/learn/manage/configuring-security/how-to-set-up-ssl-on-iis.

Затем откройте Visual Studio в качестве администратора, затем перейдите на вкладку «Веб» свойств проекта и измените там базовый адрес, чтобы использовать https с локальным IIS. VS создаст для вас виртуальный каталог с помощью схемы https.

+0

** https: //pruebaslba.xxxx.net/ServicioPyS/Service.svc ? wsdl ** - это URL-адрес NLB (Load Balanced, F5) – Kiquenet

+0

Если вы используете балансировщик нагрузки, см. мое сообщение в блоге о создании масштабируемых и безопасных служб WCF: http://blog.tonysneed.com/2012/06/ 18/building-scalable-and-secure-wcf-services –

+0

По существу, что вам нужно сделать в этой ситуации, это «fool» WCF, чтобы думать, что привязка транспорта безопасна, когда на самом деле это не так. Но здесь важно, что SSL используется для защиты трафика от NLB, но от NLB до сервера WCF вы должны использовать ipSec для защиты транспорта. Это обеспечит вам безопасность и масштабируемость. –

Смежные вопросы