使用SSL的WCF不使用任何证书并失败

时间:2013-05-23 10:22:11

标签: wcf ssl ssl-certificate webmatrix-2

我创建了一个带有多个调用的WCF,我想用传输安全保护它,所以它将通过SSL。

所以我在webmatrix中配置了SSL,因为我正在使用VS2012 + IIS Express,如下所示。 HTTPs configured in Webmatrix on port 44330 在端口 44330 上的Webmatrix中配置的 HTTP。

我更新了我的Web.config以支持一个端点,其中包含有关HTTPS和transportsecurity的元数据。

<system.serviceModel>

<services>
  <service name="Counter" behaviorConfiguration="Behavior">
    <endpoint address="https://localhost:44330/Counter.svc"
              binding="wsHttpBinding"
              bindingConfiguration="HTTPsBinding"
              contract="ICounter">
    </endpoint>
  </service>
</services>

<bindings>
  <wsHttpBinding>
    <binding name="HTTPsBinding">
      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="Behavior">
      <serviceMetadata
            httpGetEnabled="false"
            httpsGetEnabled="true"
            httpsGetUrl="" />
    </behavior>
  </serviceBehaviors>
</behaviors>

现在,当我在浏览器中运行它时,它会指向HTTPS地址的元数据,如下所示。 HTTP works but HTTPs fails HTTP有效,但HTTP失败。

这是问题,它没有使用任何证书,我什么都没看到。 "This page can't be displayed" without any certificate being used. “此页面无法显示”没有正在使用的任何证书。

如何解决这个问题或我做错了什么?

2 个答案:

答案 0 :(得分:4)

我发现我的问题不在我的WCF配置中,因为它在前一天工作。经过大量的咖啡,冲浪和指挥衬里,我注意到问题是IIS Express,它是与netsh http ssl的SSL绑定。

我使用的是默认的IIS Express证书(CN = localhost),因为我没有像Sam Vanhoutte建议的那样包含任何serviceCertificate。 即使指定证书,IIS Express也只使用需要位于 LocalMachine&gt;中的 CN = localhost 。启动IIS Express时的“个人”

如果这不能解决您的问题,请尝试重新安装IIS Express。 (它将在正确的位置重新安装CN = localhost证书 - 不要忘记在Webmatrix中重新启用SSL)

答案 1 :(得分:3)

我认为您需要在web.config中指定服务器证书

<behaviors>
  <behavior name="wsHttpCertificateBehavior">
    <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
    <serviceCredentials>
      <clientCertificate>
        <authentication 
          certificateValidationMode="PeerOrChainTrust" 
          revocationMode="NoCheck"/>
      </clientCertificate>
      <serverCertificate findValue="CN=SSLCert"/>
    </serviceCredentials>
  </behavior>
</behaviors>