WCF自托管REST服务器(https)不断要求客户端身份验证

时间:2019-01-01 02:43:07

标签: wcf ssl https certificate

我创建了一个自托管的WCF REST服务器(不带IIS)。启用S​​SL支持后,在Chrome中测试网站时,系统会一直要求我提供客户端证书。

下面是我的app.config,我认为我禁用了客户端身份验证。我在这里想念什么吗?

照片: Chrome asking for client certificate

App.config代码:

 <system.serviceModel>
<services>
  <service behaviorConfiguration="ADConnectorLibrary.Service1Behavior" name="ADConnectorLibrary.ADConnectorLibrary">
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="webHttpTransportSecurity" behaviorConfiguration="web" contract="ADConnectorLibrary.IADConnectorLibrary" >
    </endpoint>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="https://ADDRESS:8888/ADConnectorLibrary/"/>
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ADConnectorLibrary.Service1Behavior">
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="False"/>
      **<serviceCredentials>
        <clientCertificate>
          <authentication certificateValidationMode="None" />
        </clientCertificate>
      </serviceCredentials>**
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<bindings>
  <webHttpBinding>
    <binding name="webHttpTransportSecurity">
      <security mode="Transport">
        **<transport clientCredentialType="None" />**
      </security>
    </binding>
  </webHttpBinding>
</bindings>

2 个答案:

答案 0 :(得分:0)

由于您正在使用TransportSecurity,因此我认为您需要为服务分配一个证书,否则它将无法通过基于HTTPS的SSL加密邮件。

同样,客户端将不得不信任该证书,或者当客户端尝试通过浏览器通过HTTPS访问服务时,客户端将获得这些响应之一,并且来自代码的调用将失败。

enter image description here

您可能需要使用netsh,因为您没有使用IIS。您可能需要稍微研究一下netsh才能满足您的需求。

类似的事情可以将证书注册到端口并映射到应用程序guid:这是一个纯粹的示例:netsh http add sslcert ipport=127.0.0.1:8000 certhash=c20ed305ea705cc4e36b317af6ce35dc03cfb83d appid={c9670020-5288-47ea-70b3-5a13da258012} clientcertnegotiation=enable

您可能不需要此证书,因为您没有申请证书:

 **<serviceCredentials>
        <clientCertificate>
          <authentication certificateValidationMode="None" />
        </clientCertificate>
      </serviceCredentials>**

答案 1 :(得分:0)

您唯一需要做的就是在IIS中托管服务时禁用SSL设置。 enter image description here enter image description here

在我这边,我创建了一个控制台应用程序来承载服务,并使用以下命令将sslcert绑定到指定的端口。当客户端通过浏览器调用它时,它不会弹出一个对话框,并提示我选择客户端证书。

  

netsh http add sslcert ipport = 0.0.0.0:8000   certhash = 0000000000003ed9cd0c315bbb6dc1c08da5e6   appid = {00112233-4455-6677-8899-AABBCCDDEEFF}

也许我们不需要打开或禁用支持客户端证书。

  

clientcertnegotiation =禁用

这是正式文件,希望对您有用。
https://docs.microsoft.com/en-us/windows/desktop/http/add-sslcert
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-a-port-with-an-ssl-certificate

请随时告诉我是否有什么可以帮忙的。