繁体   English   中英

Xamarin App通过https连接到WCF服务的问题

[英]Issue with Xamarin App Connecting to WCF Service over https

我正在开发一个Xmarain.Forms应用程序,最初在Android上工作以及它将连接到的服务。 该服务是WCF服务,需要使用安全传输来发送消息,因此设置为使用https。

我可以使用SoapUI和使用相同客户端代理库构建的控制台程序正确连接和使用该服务,但是当我尝试使用Xamarin应用程序时,它失败了。 在模拟器中运行时,异常是TimeoutException,但是当安装在实际设备上时,异常是WebException,消息为“Error:SecureChannelFailure(身份验证或解密失败”,内部异常堆栈为:

  • IOException,带有消息“验证或解密失败”
  • IOException,消息“发送TLS警报时出错(致命:InternalError)”
  • IOException,带有消息“验证或解密失败。
  • IOException,带有消息“无法从传输连接读取数据:由对等方重置连接”

完整堆栈跟踪包含在下面作为附件。 完整代码可在https://github.com/staircase27/WcfXamarinHttpBugExample上获得,以及如何设置和使用它的说明。 示例代码使用http和https进行连接以显示差异,并显示一个有效,另一个无效。 我还在测试时检查了设备是否可以使用他们的Web浏览器访问服务,因此它不是防火墙或路由问题。

我还连接了连接以查看连接失败的确切位置,并且它在TLS v1.0级别失败。 应用程序(在我测试过的两台设备上)都在发送客户端Hello,服务正在响应TCP ​​RST数据包而不是服务器Hello。 我还使用成功的网络浏览器从测试设备执行连接,主要区别在于支持的加密类型,特别是应用程序仅提供使用

  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_WITH_RC4_128_SHA
  • TLS_RSA_WITH_RC4_128_MD5
  • TLS_RSA_WITH_DES_CBC_SHA

在哪里使用工作连接

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

具有两个连接的已过滤的wireshark位于https://github.com/staircase27/WcfXamarinHttpBugExample/raw/master/Mobile%20WCF%20https%20Capture%20-%20Filtered.pcapng 第一个连接来自应用程序,并以tcp rst失败。 第二个是从android web浏览器开始连接。

我已启用所有版本的TLS和所有cypher套件,但它没有更改应用程序中的wireshark跟踪或异常。

我还检查了@tomasr推荐的SChannel事件日志,发现了以下事件:

  • SSL客户端握手成功完成。 协商的加密参数如下。 协议:TLS 1.0。 CipherSuite:0xc014。 交流强度:256

(在启用所有版本的TLS之前,事件是:

  • 从远程客户端应用程序收到TLS 1.0连接请求,但服务器不支持客户端应用程序支持的任何密码套件。 SSL连接请求失败。
  • 生成以下致命警报:40。内部错误状态为1205。

Nexus 7  - 第1部分Nexus 7  - 第2部分Android模拟器

遗憾的是,由于评论中没有任何建议可行,我不得不解决这个问题,现在正在使用RESTful WCF API并使用HttpClient手动实现客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM