我们有一个在 iPhone 上使用 monotouch 运行的应用程序。目前我们正在使用 BasicHttpBinding 连接到 WCF 服务。我们现在正在确保连接安全,再次使用 BasicHttpBinding 和 BasicHttpSecurityMode.Transport(这实际上是 HTTPS)。
我们创建了一个自签名证书并将其添加到服务器上。通过浏览器(从 iPhone 和 PC)访问服务器地址时,我们可以毫无问题地连接到它。但是,如果我们连接 MonoTouch 应用程序,我们将得到以下异常:
System.Net.WebException has been thrown
Error writing request: BeginWrite failure
我们使用Wireshark分析连接,发现服务器正在关闭连接(服务器收到ClientHello后发送tcp reset)。我们在 IIS 的错误日志中发现以下消息:
An TLS 1.0 connection request was received from a remote client application, but none of the cipher suites supported by the client application are supported by the server. The SSL connection request has failed.
如果我们查看我们的服务器支持哪些密码,我们会看到以下列表:
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
TLS_DHE_DSS_WITH_AES_256_CBC_SHA
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_RC4_128_MD5
SSL_CK_RC4_128_WITH_MD5
SSL_CK_DES_192_EDE3_CBC_WITH_MD5
TLS_RSA_WITH_NULL_SHA256
TLS_RSA_WITH_NULL_SHA
而我们知道 Monotouch 至少支持 TLS_RSA_WITH_AES_128_CBC_SHA (根据 Wireshark)
有没有人有解决这个问题的方法或解决方法?也许我们需要在 IIS 或 makecert 中使用一些特殊选项?
提前致谢!