Azure负载平衡器+ WCF SSL +源IP /端口异常

时间:2018-08-01 21:35:58

标签: c# azure wcf ssl

设置

WCF服务是使用basicHttpsBinding自托管的,安全模式设置为Transport,clientCredentailType设置为Certificate(相互认证)。所有必需的证书都安装在服务器上。 sslcert和urlacl均已正确执行。协商客户端证书设置为已启用。

<system.serviceModel>
<services>
  <service name="ServiceName" behaviorConfiguration="behaviorConfiguration">
    <endpoint name="EndpointName" 
              address="https://localhost/service.svc" 
              binding="basicHttpsBinding" 
              bindingConfiguration="httpsBinding" 
              contract="IServiceContract">
    </endpoint>
  </service>
</services>
<bindings>
  <basicHttpsBinding>
    <binding name="httpsBinding">
      <security mode="Transport">
        <transport clientCredentialType="Certificate" />
      </security>
    </binding>        
  </basicHttpsBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="behaviorConfiguration">                    
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
      <serviceDebug 
        includeExceptionDetailInFaults="false" 
        httpHelpPageEnabled="false" 
        httpsHelpPageEnabled="false" />
      <serviceCredentials>
        <clientCertificate>
          <authentication 
            certificateValidationMode="ChainTrust" 
            trustedStoreLocation="LocalMachine" />
        </clientCertificate>
        <serviceCertificate 
            storeLocation="LocalMachine" 
            storeName="My" 
            x509FindType="FindByThumbprint" 
            findValue="certificate_thumbprint" />
      </serviceCredentials>
      <serviceSecurityAudit 
        auditLogLocation="Application" 
        messageAuthenticationAuditLevel="SuccessOrFailure" 
        serviceAuthorizationAuditLevel="SuccessOrFailure" />
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

Azure负载平衡器的运行状况探针为tcp / 443,单个负载平衡规则为tcp / 443。

问题

一次成功的请求/响应将发生。通过基于serviceSecurityAudit中的配置查看事件日志,可以验证MessageAuthentication和ServiceAuthorization是否成功。

大约2分钟后,将进行后续调用,但是这次WCF将抛出一个异常详细信息,“需要客户端证书。在请求中找不到证书...”。

我已启用跟踪,并且可以验证与源建立连接后将近2分钟发生了异常。下面的跟踪图像显示连接始于12:59:43,但错误发生于13:01:48

Trace

更深入地研究跟踪,我发现在2分钟的时间范围内使用相同的源ip和端口时会发生此问题。

IP

在同一时间窗口中,我使用了Azure的数据包捕获功能来查看它是否可以提供更多详细信息。它本质上显示的是同一件事。

Packet Capture

我不知道随后的请求失败的确切原因是什么。是否有一些WCF超时需要调整? Azure负载平衡器是否有问题?这是tcp连接池问题(connectionPoolSettings)吗?

如果有人遇到类似问题或知道如何进一步调试/跟踪该问题,我将不胜感激。

最后,禁用相互身份验证不会遇到相同的问题。但是,这不是一个选择。

0 个答案:

没有答案