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

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

ただいまの
回答率

90.43%

  • C#

    7979questions

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

  • SSL

    540questions

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

  • HTTPS

    289questions

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

  • IIS

    193questions

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

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

受付中

回答 0

投稿

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

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • SNB53857

    2019/01/16 11:46

    現在非常に気になっているので以下のことを調べています。
    ・Windows7で扱うことができるクライアント証明書の署名アルゴリズム
      当該仮想PCは事情があり長らくアップデートされていない状態です
      そのうえで、発行されているクライアント証明書は署名アルゴリズムがSHA512ですので、
      そこが原因となっていないか
       使用している.netframeworkは4.6ですが、httpwebrequestで使用する証明書を取り出すとき、
       Windows7のアップデート状況に引っ張られたりしないか?

    キャンセル

  • キャンセル

  • SNB53857

    2019/01/17 16:03

    hihijiji様
    情報を共有いただき誠にありがとうございます。

    以下を実施してみます。
    ・仮想PCに上記アップデートが適用されているか確認
    ・物理マシンに未アップデートのWindows7を用意し、当該ソフトを動作させる
      403.7となるなら上記アップデートを適用しどうなるかを確認

    キャンセル

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

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

  • C#

    7979questions

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

  • SSL

    540questions

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

  • HTTPS

    289questions

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

  • IIS

    193questions

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

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