如何通过WCF设置SSL



我在生产环境中收到的错误:

根据验证过程,远程证书无效
[AuthenticationException:根据验证过程,远程证书无效。]System.Net.SslState.StartSendAuthResetSignal(ProtocolToken消息,AsyncProtocolRequest asyncRequest,异常异常)+2755308
System.Net.SslState.StartSendBlob(Byte[]传入,Int32计数,AsyncProtocolRequest异步请求)+470

生产环境使用三层架构,Web与应用程序对话,应用程序与数据库对话。Web和应用程序使用WCF服务层通过SSL(443)进行通信。我们认为这可能是IIS7中SSL证书中的配置或WCF配置问题。

我们的尝试:我将应用程序和Web中的证书添加到"本地计算机"one_answers"当前用户"的受信任机构。

如果需要,我可以添加我的WCF Web配置。

我尝试了以下建议:

https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/ms734695.aspx

"根据验证过程,远程证书无效"使用Gmail SMTP服务器

我如何知道证书的storeName是什么?

https://msdn.microsoft.com/en-us/library/ms733813(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/hh556232%28v=vs.110%29.aspx

具有相互SSL(服务和客户端之间)的自托管WCF服务失败,出现403 Forbidden

这个答案适用于客户端证书,在客户端证书中,您将证书和负载一起发送到HTTPS端点。

您需要确保您信任该证书,信任创建该证书的证书颁发机构,并且您的受信任存储中有该CA的证书。

您是否能够转到系统上需要提供证书的简单网页(而不是WCF服务)?即:https://mysite/test.aspx这将允许您在WCF之外测试证书,并允许您将WCF问题与IIS问题分开。

1) 请确保已在IIS中设置证书映射。http://www.iis.net/configreference/system.webserver/security/authentication/clientcertificatemappingauthenticationhttp://blogs.msdn.com/b/asiatech/archive/2014/02/13/how-to-configure-iis-client-certificate-mapping-authentication-for-iis7.aspx

短tl;博士我们所做的:

  • 将客户端证书添加到证书存储(私钥)
  • 将用户添加到本地用户
  • 转到IIS并将证书映射到您创建的用户
  • 运行winhttpcfg.exe以提供应用程序池的用户访问该证书

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384088%28v=vs.85%29.aspx

2) 确保web.config设置正确(我们的样本允许通过HTTP和HTTPS到达终点)

<bindings>
   <basicHttpBinding>
     <!-- Secure Bindings -->
     <binding name="secureHttpBinding">
       <security mode="Transport">
         <transport clientCredentialType="Certificate" />
       </security>
      </binding>
      <binding name="httpBinding">
        <security mode="None" />
      </binding>
   </basicHttpBinding>
</bindings> 
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaviour">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
         <!-- Person Revised Service-->
        <service name="Services.PRPA_AR101202" behaviorConfiguration="ServiceBehaviour">
            <endpoint address="" binding="basicHttpBinding" bindingConfiguration="secureHttpBinding" contract="Services.IPRPA_AR101202"></endpoint>
            <endpoint address="" binding="basicHttpBinding" bindingConfiguration="httpBinding" contract="Services.IPRPA_AR101202" />
        </service>
</services>

同样,这个答案适用于带有消息的客户端证书,如果它只是常规HTTP,则可以忽略它

最新更新