最終的にはIoT向けのUWPアプリをC#で作成していますが、今はローカルでのみデバッグしています。私もWindows.Web.Http.HttpClient
を使用して、私が書いた自己ホストWCF REST Webサービスに接続し、テストのために同じマシン上でコンソールアプリケーションとして実行しています。サービスは証明書との相互認証を必要とするため、私はCA証明書、サービス証明書、およびクライアント証明書を持っています。UWPアプリHttpClient HTTPSクライアント証明書の問題
私のUWPのコードは次のように動作します。クライアント証明書とCA証明書のための
- チェックアプリの証明書ストアにインストールされています。
- PFXファイルとCERファイルからそれぞれインストールします。
- は
HttpBaseProtocolFilter
へCertificate
を取り付けて、私は次のエラーを取得するPostAsync
呼び出した後HttpClient
- コール
HttpClient.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は正しいクライアント要求の中の証明書)。 WiresharkをWindows上でlocalhostを使って動作させるのは苦痛なので、私はまだWiresharkにヒットしていません。
私の次のステップは、クライアント認証を必要としないようにWebサービスを変更し、それが問題かどうかを確認することです。
2つの質問:この場合、Windows.Web.Http.HttClient
はなぜ機能しないのですか?それほど重要ではないが、これをさらにデバッグするのに役立つ良いHTTP監視ツールに関する推奨事項はありますか?
は、これらの自己署名本命ですみては? –
私は 'makecert'を使ってCA証明書を作成し、そのCA証明書から' makecert'でクライアント証明書とサービス証明書を発行しました。 – koopaking3
おそらく関連性があります:https://code.msdn.microsoft.com/windowsapps/How-to-ignore-Self-Signed-e50b89b6 –