是否可以有一个 WCF Rest Webservice,它不包括 SSL 客户端证书,并且 IIS SSL 设置不设置为“需要 SSL”,并且只“接受”客户端证书而不是“需要”它们?
我有以下配置:
<system.serviceModel>
<services>
<service behaviorConfiguration="RestServiceBehaviour" name="PM.WCF.Service.PmRestService">
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding"
bindingConfiguration="StreamedRequestWebBinding" contract="PM.WCF.Service.IPmRestService" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="StreamedRequestWebBinding"
bypassProxyOnLocal="true"
useDefaultWebProxy="false"
hostNameComparisonMode="WeakWildcard"
sendTimeout="10:15:00"
openTimeout="10:15:00"
receiveTimeout="10:15:00"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647"
maxBufferPoolSize="2147483647"
transferMode="StreamedRequest">
<readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" />
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="RestServiceBehaviour">
<serviceMetadata httpsGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
我的问题是以下行:
<transport clientCredentialType="Certificate"/>
如果我使用此设置并将 IIS 配置为接受但不需要客户端证书,则会收到以下错误:
服务“SslRequireCert”的 SSL 设置与 IIS“SslNegotiateCert”的设置不匹配。
可悲的设置
<transport clientCredentialType="None"/>
也不行。我很确定浏览器/客户端确实发送了它的证书,OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.IsAuthenticated
但是False
.
那么有没有其他方法来拥有两个 IIS 网站,一个配置为需要 SSL 和客户端证书,一个不需要?
即使没有办法绕过它。如何在 Visual Studio 中调试它?因为当我需要 SSL 客户端证书时,我不能只启动 web 服务。http://localhost/Foo.WCF.Service/debugattach.aspx
由于缺少客户端证书,Visual Studio 尝试访问并失败。