質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.38%

  • C#

    9491questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • SSL

    623questions

    SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

  • HTTPS

    324questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

  • IIS

    217questions

    IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Hyper-Vの仮想マシンからAzureのIISサーバに対してクライアント証明書を用いたHTTPS通信を行うことができない

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 261

SNB53857

score 2

前提・実現したいこと

Hyper-Vで動作させている仮想マシン(windows7 Enterprise)上のソフトウェアから、
クライアント証明書を用いたHTTPS通信をAzure上のIISと行おうとするとIISのアク
セスログに「403 7」と記録されて通信を行うことができません。

この場合、どのように調査を行っていけばよいかご教示いただけないでしょうか。

発生している問題・エラーメッセージ

記録された例外(WebException)のResponseを表示した際、「Forbidden」となります。
また、IISのログファイル(C:\inetpub\logs\LogFiles\W3SVC1直下のログ)に、当該PCからの
通信についてステータスコードが「403 7」が記録されています。

該当のソースコード

var request = (HttpWebRequest)WebRequest.Create(接続先URL);

request.ContentType = "application/json; charset=utf-8";
request.Method = method;←POSTやPUTが入ります
request.Timeout = requestTimeoput;←設定ファイルに設定したタイムアウト時間が入ります
request.KeepAlive = true;

request.ClientCertificates.Add(クライアント証明書オブジェクト);

try{
 using (var streamWriter = new StreamWriter(request.GetRequestStream()))
 {
  streamWriter.Write(IISに送信するJSON形式のデータ);
 }
 var response = (HttpWebResponse)request.GetResponse();←ここで例外に飛んでいます
}
catch (System.Net.WebException webEx)
{
 if (webEx.Status == System.Net.WebExceptionStatus.ProtocolError)
 {
  System.Net.HttpWebResponse errorCode = (System.Net.HttpWebResponse)webEx.Response;
  logger_.ErrorFormat("Statucs code:{0}", errorCode.StatusCode);
 }
}

試したこと

・上記ソフトウェアは、定期的に収集したデータを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でした。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • hihijiji

    2019/02/12 13:04

    問題の起きている仮想マシンのイメージを複製して、別のVMで件のパッチを当ててみるとか…
    PS.修正依頼欄で話すのもなんですが、回答と言えるほどのレスでもないんですよね…

    キャンセル

  • SNB53857

    2019/02/13 16:06

    >・物理マシンに未アップデートのWindows7を用意し、当該ソフトを動作させる
    >  403.7となるなら上記アップデートを適用しどうなるかを確認
    > →ほとんど何も当たっていない状態のWindows7Embeddedが準備できましたので、
    >  .netframework4.6と当該ソフトのみをインストールし、動作させてみましたが
    >  特に問題なくサーバとクライアント証明書を使って通信ができているようです
    上記を確認した際に、IIS側のSSL設定でクライアント証明書の使用を必須に変更することを忘れておりました。
    先ほど確認したところ、403.7エラーが発生して通信を行うことができないことを確認できました。
     接続先はWindowsServer2016
      別のサーバ(WindowsServer2012)に接続を行った際は通信を行うことができました

    WindowsServer2016+クライアント証明書必須設定+sha2のクライアント証明書をWindowsUpdateがされていないWindows7で使用
    =403.7エラーが発生しているようでした

    キャンセル

  • hihijiji

    2019/02/14 12:10

    原因が特定できたみたいでよかったですね。
    お疲れさまでした。
    解決したら回答欄に書いて自己解決でお願いします。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    9491questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • SSL

    623questions

    SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

  • HTTPS

    324questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

  • IIS

    217questions

    IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

  • トップ
  • C#に関する質問
  • Hyper-Vの仮想マシンからAzureのIISサーバに対してクライアント証明書を用いたHTTPS通信を行うことができない