SSL + X.509上的Web服务返回SSL / TLS错误

时间:2014-04-04 19:17:49

标签: c# asp.net web-services wcf ssl

我在Visual Studio 2013中编写了一个asmx Web服务。 WS使用HTTPS和X.509连接到提供程序进行身份验证。

我尝试使用“basicHttpBinding”和“basicHttpsBinding”(Web.config)进行连接,但总是会收到以下错误。

错误:System.ServiceModel.Security.SecurityNegotiationException:无法为具有权限“www.providers-site.se”的SSL / TLS建立安全通道。 ---> System.Net.WebException:请求已中止:无法创建SSL / TLS安全通道。在System.Net.HttpWebRequest.GetResponse()at ....

我已经为X.509创建了一个行为,并为端点创建了一个绑定,见下文。 我究竟做错了什么? 我会从使用wsHttpBinding中获益吗?

<behaviors>
   <endpointBehaviors>
     <behavior name="CertBehaviour">
       <clientCredentials>
         <clientCertificate findValue="MyCertCN" storeLocation="LocalMachine"
                            storeName="My" x509FindType="FindBySubjectName" />
          <serviceCertificate>
          <authentication certificateValidationMode="PeerTrust" />
          </serviceCertificate>
       </clientCredentials>
     </behavior>
   </endpointBehaviors>
 </behaviors>

...

<basicHttpsBinding>
   <binding name="mySoapBinding">
     <security mode="Transport">
       <transport clientCredentialType="Certificate" />
        <message clientCredentialType="Certificate" />
     </security>
   </binding>
  </basicHttpsBinding>

...

<client>
  <endpoint address="https://www.providers-site.se/na/na_epersondata/services/personpostXML"
                behaviorConfiguration="CertBehaviour" binding="basicHttpsBinding"
                bindingConfiguration="mySoapBinding" contract="webservice.NaPersonPostXMLWS"
                name="personpostXML" />
</client>

我确实跑了一下。感谢Mike Cheel! See trace here.

此跟踪是否表示远程主机(提供商)不接受证书? (第67-71行) (由于“AUTHENTICATE_REQUEST NOTIFICATION_CONTINUE”和“AnonymousAuthenticationModule”在证书认证后启动。)

CertificateMappingAuthenticationModule NOTIFY_MODULE_START RequestNotifications AUTHENTICATE_REQUEST
AUTH_START Authentication MapCliCert
AUTH_END Authentication
CertificateMappingAuthenticationModule NOTIFY_MODULE_END RequestNotifications AUTHENTICATE_REQUEST NOTIFICATION_CONTINUE  
AnonymousAuthenticationModule NOTIFY_MODULE_START RequestNotifications  AUTHENTICATE_REQUEST

1 个答案:

答案 0 :(得分:1)

确保您在asmx计算机的受信任根存储中拥有providers-site服务的证书链。你可以通过输入你的浏览器来找到:

https://www.providers-site.se/na/na_epersondata/services/personpostXML

并查看其证书链。浏览器也会显示警告。

暂时解决证书错误的另一个选择是试试这个:

ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => 
    {
     // put a breakpoint here
     var tempSslErrors = sslPolicyErrors;
     return  true;
    }

如果你看sslPolicyErrorsit可能会给出一些指示。