前提・実現したいこと
Hyper-Vで動作させている仮想マシン(windows7 Enterprise)上のソフトウェアから、
クライアント証明書を用いたHTTPS通信をAzure上のIISと行おうとするとIISのアク
セスログに「403 7」と記録されて通信を行うことができません。
この場合、どのように調査を行っていけばよいかご教示いただけないでしょうか。
発生している問題・エラーメッセージ
記録された例外(WebException)のResponseを表示した際、「Forbidden」となります。 また、IISのログファイル(C:\inetpub\logs\LogFiles\W3SVC1直下のログ)に、当該PCからの 通信についてステータスコードが「403 7」が記録されています。
該当のソースコード
C#
1var request = (HttpWebRequest)WebRequest.Create(接続先URL); 2 3request.ContentType = "application/json; charset=utf-8"; 4request.Method = method;←POSTやPUTが入ります 5request.Timeout = requestTimeoput;←設定ファイルに設定したタイムアウト時間が入ります 6request.KeepAlive = true; 7 8request.ClientCertificates.Add(クライアント証明書オブジェクト); 9 10try{ 11 using (var streamWriter = new StreamWriter(request.GetRequestStream())) 12 { 13 streamWriter.Write(IISに送信するJSON形式のデータ); 14 } 15 var response = (HttpWebResponse)request.GetResponse();←ここで例外に飛んでいます 16} 17catch (System.Net.WebException webEx) 18{ 19 if (webEx.Status == System.Net.WebExceptionStatus.ProtocolError) 20 { 21 System.Net.HttpWebResponse errorCode = (System.Net.HttpWebResponse)webEx.Response; 22 logger_.ErrorFormat("Statucs code:{0}", errorCode.StatusCode); 23 } 24} 25
試したこと
・上記ソフトウェアは、定期的に収集したデータをIIS上のWebアプリにアップロードする機能があり、そこでHTTPS(クライアント証明書を用いた認証)を使用しています。
他の物理マシン(windows7 embedded)では正常にHTTPSで通信ができることは確認しています。
・クライアント証明書はIISサーバが属しているドメインで発行してもらったものを使用しています。利用の際はpfx形式のクライアント証明書を「mmc」の証明書スナップイン(ローカルコンピュータ)で個人ストアにインストールして使用しています。
後述のソースコードで個人ストア内の証明書をすべて取得したのち、設定ファイルに設定したサブジェクトと一致する証明書をhttepwebrequestオブジェクトにAddして使用しています
・HTTPS通信に失敗しているPCに別のクライアント証明書を使用するように設定して、HTTPS通信を行っても通信に失敗します。
逆に、HTTPS通信に失敗しているPCで使用していたクライアント証明書を物理マシンで使用すると特に問題なくHTTPS通信を行うことができます。
・IIS上のSSLの設定について、「クライアント証明書」の設定を「無視」もしくは「受理」に設定すると通信ができることは確認しています。
・クライアント証明書の発行元となったCAの証明書は信頼されたルート証明機関にインストール済みです。
IISサーバ及びHTTPS通信に失敗しているPC上の証明書ストアを「mmc」で開き、クライアント証明書をダブルクリックして証明書のパスを表示すると特に問題は見当たりませんでした。
・明示的にhttp1.1を使うように実装変更してみましたが効果がありませんでした。
・request.ClientCertificates.Add後に、request.ClientCertificates.Countを表示すると1でした。

回答1件
あなたの回答
tips
プレビュー