最終的には IoT 向けの UWP アプリを C# で作成していますが、現在はローカルでデバッグするだけです。Windows.Web.Http.HttpClient
テスト用に同じマシンでコンソールアプリとして作成し、実行している自己ホスト型の WCF REST Web サービスに接続するために使用しています。サービスには証明書による相互認証が必要なので、CA 証明書、サービス証明書、およびクライアント証明書を持っています。
私の UWP コードは次のように動作します。
- クライアント証明書と CA 証明書がインストールされているかどうか、アプリ証明書ストアを確認します。
- そうでない場合は、それぞれ PFX ファイルと CER ファイルからインストールします。
- を に取り付け、フィルターを に追加します
Certificate
。HttpBaseProtocolFilter
HttpClient
- 電話する
HttpClient.PostAsync
電話した後PostAsync
、次のエラーが表示されますAn Error Occurred in the Secure Channel Support
。オンラインで十分な検索を行った後、常識的にHttpClient
、相互認証された SSL 接続を確立する際の問題が原因で、バーフィングしていると確信しています。しかし、私のトラブルシューティングに基づいて、理由がわかりません。
さらにトラブルシューティングを行うために、 を使用して単純な古いコンソール アプリを作成しSystem.Net.Http.HttpClient
、クライアント証明書をリクエストに添付すると、すべてがうまく機能します。残念ながら、System.Net
UWP では完全にはサポートされていません。また、証明書を UWP にアタッチしないことも試みましたがHttpClient
、アプリは UI でインストール済みの証明書を選択するように求めてきました。正しい証明書を選択しても、同じ例外が発生します (これにより、少なくとも証明書が正しくインストールされ、アプリの観点から CA で適切に検証されていることがわかります)。さらに、ブラウザから Web サービスで GET を押し、プロンプトが表示されたらクライアント証明書を選択し、ファイルをダウンロードできます。
私は Fiddler を使用してみましたが、トラフィックをプロキシする方法のために、Web サービスが要求を禁止として拒否することを除いて、もう少しうまくいくようです (おそらく、Fiddler が要求に正しいクライアント証明書を含めていないため) )。Windows で localhost を使用して Wireshark を動作させるのは面倒なので、まだ Wireshark にアクセスしていません。
私の次のステップは、クライアント認証を必要としないように Web サービスの変更を開始し、それが問題かどうかを確認することです。
2 つの質問:Windows.Web.Http.HttClient
この場合、なぜ機能しないのですか? そして、それほど重要ではありませんが、これをさらにデバッグするのに役立つ優れた HTTP 監視ツールに関する推奨事項はありますか?