0

当我访问我的网络服务 localhost/MyService/MyService.svc 时出现以下错误

服务“SslRequireCert”的 SSL 设置与 IIS“Ssl,SslNegotiateCert”的设置不匹配。

我遵循http://msdn.microsoft.com/en-us/library/ms731074.aspx中指定的 web.config 示例

这是我的 wcf 服务器 web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <appSettings />
  <system.web>
    <identity impersonate="false" />
    <roleManager enabled="true" />
    <authentication mode="Windows" />
    <customErrors mode="Off" />
    <webServices>
      <protocols>
        <add name="HttpGet" />
        <add name="HttpPost" />
      </protocols>
    </webServices>
  </system.web>
  <system.webServer>
    <directoryBrowse enabled="true" />
    <validation validateIntegratedModeConfiguration="false" />
    <security>
      <authorization>
        <remove users="*" roles="" verbs="" />
        <add accessType="Allow" users="*" roles="" />
      </authorization>
    </security>
  </system.webServer>
  <system.serviceModel>
    <services>
      <service name="AspNetSqlProviderService" behaviorConfiguration="MyServiceBehavior">
        <endpoint binding="wsHttpBinding" contract="Interface1" bindingConfiguration="CertificateWithTransportWSHttpBinding" />
        <endpoint binding="wsHttpBinding" contract="Interface2" bindingConfiguration="CertificateWithTransportWSHttpBinding" />
        <endpoint address="mex" binding="wsHttpBinding" bindingConfiguration="CertificateWithTransportWSHttpBinding" name="Metadata_Exchange" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceDebug includeExceptionDetailInFaults="True" />
          <serviceMetadata />
          <serviceCredentials>
            <clientCertificate>
              <authentication trustedStoreLocation="LocalMachine"
                               revocationMode="Online"/>
            </clientCertificate>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="CertificateWithTransportWSHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

我已将 IIS 配置如下:

  • 使用自签名证书添加的 https 绑定
  • 在 SSL 设置下,选中需要 SSL 并接受客户端证书
  • 自签名证书已添加到本地计算机受信任的根 CA。

我可以浏览并执行 .asmx 服务定义,但 .svc 给了我上述错误。

4

3 回答 3

1

尝试注释掉您的 mex 端点。那应该让它工作

于 2012-04-19T14:50:27.317 回答
0

这是过程

  1. 在 IIS 中创建自签名证书。
  2. 在 IIS 中创建站点。
  3. 将站点设置为需要 SSL。
  4. 当您在绑定中选择 https 协议时,IIS 7 中的一个故障不允许您指定站点的主机名。此处提供了正确设置此绑定的主机名的说明。
  5. 在您的网络配置中像这样修改它

    <wsHttpBinding> 
       <binding name="CertificateWithTransportWSHttpBinding"> 
           <security mode="Transport"> 
              <transport clientCredentialType="none" /> 
           </security> 
       </binding> 
    </wsHttpBinding>
    
    
    <serviceBehaviors>  
       <behavior name="MyServiceBehavior">  
          <serviceDebug includeExceptionDetailInFaults="True" />  
             <serviceMetadata />   
       </behavior>  
    </serviceBehaviors>  
    
  6. 在您的 MEX 端点中设置 binding="wsHttpsBinding"

如果您完成上述所有操作,您应该可以使用 SSL WCF 服务启动并运行。

于 2010-11-06T01:30:12.360 回答
0

我为此努力了至少 2-3 个小时,并忽略了上面关于注释掉你的 mex 端点的回复。

这被证明是我的答案,所以只是想重新执行上面的答案。请参阅上述帖子中第 7 步底部的评论:

http://consultingblogs.emc.com/matthall/archive/2009/10/22/client-certificate-authorisation-with-wcf-in-development-environments.aspx

于 2012-09-28T12:19:29.360 回答