上の.NET CFアプリケーションで、「SSL/TLSの安全なチャネルを確立できませんでした」。は、アプリケーションがWindows Mobileのスマートフォン上で.NET Compact Frameworkの3.5上で実行されていると私は頑固なコミュニケーションの問題を持っているスマートフォン
私はこのコードを使用してWeb要求を構築しています:
UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] Data = encoding.GetBytes(HttpUtility.ConstructQueryString(parameters));
httpRequest = WebRequest.Create((domain)) as HttpWebRequest;
httpRequest.Timeout = 10000000;
httpRequest.ReadWriteTimeout = 10000000;
httpRequest.Credentials = CredentialCache.DefaultCredentials;
httpRequest.Method = "POST";
httpRequest.ContentType = "application/x-www-form-urlencoded";
httpRequest.ContentLength = Data.Length;
Stream SendReq = httpRequest.GetRequestStream();
SendReq.Write(Data, 0, Data.Length);
SendReq.Close();
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
return httpResponse.GetResponseStream();
のWebサービス機能は、URLの一部(例えばとしてJSONエンコードされた文書を受信することによりhttps://site.com/ws/sync??document= {「バージョン」: "1.0.0 」、 "アイテム":[{ "item_1": "ITEM1"}]} &ユーザー= USR &パスワード= PW)、及び応答は、応答データとして別のJSON文書を受信します。
このコードでは、我々は(そして唯一のスプリントネットワーク上の)のTreoスマートフォンを実行中のお客様のカップルの問題を見てきたすべてのエミュレータとWM 5と6を実行しているPDAなどの微細な動作します。我々は、(DeviceAnywhereを介して)AT & Tネットワーク上の同一のデバイス上のコードをテストしており、再びコードが期待どおりに機能しました。
これは電話機のセキュリティポリシーの1つである必要がありますが、私たちは解決策を特定することができず、家で再現できないため徹底的に診断することができず、ユーザーに実行支援私たちのためのテストドライバー。
このコードを実行すると、ユーザのデバイスは、次の例外がスローされます。
System.Net.WebException
は、SSL/TLS
スタックトレースのための安全なチャネルを確立できませんでした:System.Net.HttpWebRequest.finishGetRequestStreamで()System.Net.HttpWebRequest.GetRequestStream()OurApp.GetResponseStreamで
で
(文字列のドメイン、ハッシュテーブルのパラメータ)
内部例外:リモートパーティがトランスポートストリームを閉じたので System.IO.IOException
認証に失敗しました。
スタックトレース:System.Net.SslConnectionState.ClientSideHandshakeで()System.Net.Connection.connectで
(オブジェクトは無視)()System.Net.SslConnectionState.PerformClientHandShakeで
のSystem.Threading.ThreadPoolで
。サーバーApacheのログを調べるSystem.Threading.Timer.ringでWorkItem.doWork(オブジェクトo)
()
は、ユーザーのIPからのヒットを示していない - 私は、デバイスにも送信しようとしているとは思いませんパケットが失敗する前に。 該当する場合、サーバーはLinux上でApacheを実行しており、TurboGears Pythonフレームワークを使用して書かれています。
サーバー証明書はCAによって発行され、有効です。 このエラーがコピーされたテストドライバは、コードは署名されていませんでしたが、エラーメッセージなしで同じエラーがGeoTrust証明書で署名されているため、コード署名の問題ではないと思われます。
アプリケーションは、すべての電話で問題なくインストールされ、起動されます。これは、これらのユーザーにとって壊れているこのSSL接続を確立しているだけです。
トラブルシューティングの重大な問題の1つは、ソリューションを試すたびに大きな不便があるということです(ボランティアの顧客を探す必要があるため)、実際に銀色の弾丸を探したり、ハンドシェイクのプロセスでは、ユーザーに1〜2回以上のテストを依頼するだけで十分だと自信が持てます。
最後にひとつ言及:私たちは、ActiveSyncの上でも、同一の結果とGPRS上で両方の同期を試してみました。
ご意見をいただければ幸いです!