2013-06-22 32 views
0

我有三個不同的WCF服務部署在服務器上,分別位於IIS中「Default WebSites」下的自己的應用程序目錄中。其中一項服務由我部署,另外兩項服務由其他客戶部署。有一個服務器證書部署在IIS中,我綁定了我的服務。使用單一證書託管多個WCF服務

但是,當我嘗試訪問我的服務形式的https我得到這個錯誤在彈出:。

地址不匹配 此網站出具的安全證書發出了不同的網站的地址 這個問題可能顯示試圖欺騙您或截獲您向服務器發送任何數據。

我服務的

禰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> 

有趣的是,當我打以下網址: https://myserverurl.com/applicationfolder/service.svc?wsdl

得到WSDL,它完美地運行,並返回我的WSDL描述,但原來的呼叫不能正常工作。

爲什麼我得到「不匹配的地址」?是否需要添加主機基地址?如果是,在web.config中如何以及在何處添加它,是否需要將其添加到其他兩個部署的wcf服務中?端口是否與證書衝突?我是新來的wcf請幫我解決這個問題?

我使用.net 4.0,IIS 7.0,windows server 2008.

在此先感謝。

回答

0

錯誤消息(基本上)您的站點使用的證書與用於連接到站點的DNS名稱(來自客戶端的瀏覽器)不匹配。

我的猜測是你正在實施虛擬主機;即從一個IIS實例提供不同DNS名稱的多個服務。這將無法正常工作......除非您爲每項服務使用不同的證書,或者使用與所有服務DNS名稱匹配的通配符證書。

顯然,基於名稱的SSL虛擬主機在7.0之前不受IIS支持。 This article描述瞭如何爲IIS 7.0配置它。但需要注意的是,在相應的證書名稱必須匹配相應的虛擬主機名......


注意的是,主機名和證書必須符合要求,是SSL安全性的基礎。它允許瀏覽器/用戶知道它正在與期望的服務器通信(基於DNS名稱)而不是某個冒名頂替者站點。