0

我在服务器上分别部署了三个不同的 WCF 服务,在 IIS 的“默认网站”下有自己的应用程序目录。其中一项服务由我部署,另外两项服务由其他客户端部署。在 IIS 中部署了一个服务器证书,我已将我的服务绑定到该证书。

但是当我尝试访问我的服务表单 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>

有趣的是,当我点击以下 URL 时: https ://myserverurl.com/applicationfolder/service.svc?wsdl

为了获得 wsdl,它运行完美并返回 wsdl 描述,但原来的调用不起作用。

为什么我会收到“地址不匹配”?是否需要添加主机基地址?如果是的话,如何以及在何处将其添加到 web.config 中,是否需要将其添加到部署的其他两个 wcf 服务中?端口是否与证书冲突?我是 wcf 新手,请帮我解决这个问题?

我正在使用 .net 4.0、IIS 7.0、Windows Server 2008。

提前致谢。

4

1 回答 1

0

该错误消息(基本上)表明您用于站点的证书与正在使用(来自客户端的浏览器)连接到该站点的 DNS 名称不匹配。

我的猜测是您正在实施虚拟主机;即从一个 IIS 实例提供的具有不同 DNS 名称的多个服务。这行不通……除非您为每个服务使用不同的证书,或者使用与所有服务 DNS 名称匹配的通配符证书。

显然,7.0 之前的 IIS 不支持基于名称的 SSL 虚拟主机。 本文介绍如何为 IIS 7.0 配置它。但请注意,各个证书中的名称必须与相应的虚拟主机名匹配...


请注意,主机名和证书必须匹配的要求是 SSL 安全性的基础。它允许浏览器/用户知道它正在与预期的服务器(基于 DNS 名称)而不是某个冒名顶替的站点进行通信。

于 2013-06-26T16:32:29.733 回答