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

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

ただいまの
回答率

90.85%

  • ASP.NET

    456questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

  • SSL

    434questions

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

  • IIS 7

    51questions

    IIS(インターネットインフォメーションサービス) 7は、 Microsoftによって開発された、Windowsの標準ウェブサーバーです。Window Server 2008 と Windows Vista向けにリリースされました。

クライアント証明書内の情報の取得について IIS ASP.NET

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,011

siritaidake

score 0

問題

  1. クライアント証明書を取得できない。
    Visual Stdio で デバッグ実行を行うと、後述のソースで、自PCにインストールされた証明書各種を取得できます。
    しかし、開発PCと同じPCにIISを立てて、そちらにサイトを構築して、サイトにアクセスすると証明書が一つも取得できません。
  2. IISのSSL設定の「SSLが必要」及び「クライアント証明書:無視 or 受理 or 必要」の設定について
    クライアント証明書について検索したところ、クライアント証明書をhttpRequestに含みたい場合は、「SSLが必要」チェックをON,「クライアント証明書:必要」と設定するべきだと書いてあったので、してみたのですが、アクセス時にクライアント証明書を選ぶウィンドウもでませんし、結局リクエストにはクライアント証明書が含まれていませんでした。

問題1のソース

protected void Page_Load(object sender, EventArgs e)
{

X509Certificate2Collection values = new X509Certificate2Collection();
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
//↑StoreName.My, StoreLocation.CurrentUserの引数は、mmcで確認しながらいろいろ試した

//ReadOnlyで開く
store.Open(OpenFlags.ReadOnly);

values = store.Certificates;

//現時点で有効な証明書を絞り込み
X509Certificate2Collection valuesValid = values.Find(X509FindType.FindByTimeValid, DateTime.Now, true);

string str = "<table>";

//該当する証明書の情報を表示する
for (int i = 0; i < valuesValid.Count; i++)
{
    X509Certificate2 value = valuesValid[i];
    str += string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td><td>{7}</td><td>{8}</td><td>{9}</td><td>{10}</td><td>{11}</td><td>{12}</td></tr>"
    , value.Issuer, value.IssuerName, value.NotAfter, value.NotBefore, value.PrivateKey, value.PublicKey, value.SerialNumber, value.SignatureAlgorithm, value.Subject, value.SubjectName, value.Thumbprint, value.Version, value.FriendlyName
        );
}//for

store.Close();

Label1.Text = str + "</table>";

Label1.Text = Label1.Text + string.Format("<br><br>{0}コ<br>", values.Count);

}


参考サイトはこちら

問題2のソース

protected void Page_Load(object sender, EventArgs e)
{
   HttpClientCertificate cert = Request.ClientCertificate;
   if(cert.IsPresent)
   {
      //ある
   }
   else{
      //なし
   }
}


参考にしたサイトが見つけられませんでした

補足

  • IISはDefaultサイトの下に作ったアプリケーションを追加しました。
  • SSLの設定は、「自己証明書入りの証明書の作成」からの手順と方法で設定しました。
  • オレオレ認証局を立てました(windows server 2012)。 そこで、クライアント証明書を作り、インストールしました。
  • クライアント証明書認証がしたいわけではない。IISの機能にある認証機能マッピングを使いたいわけではありません。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2017/01/06 13:30

    表題の「クライアント証明書内の情報の取得について」というのが質問と思って回答しましたが、違いましたか? 違うとすると質問は何なのでしょうか?

    キャンセル

  • siritaidake

    2017/01/06 15:30

    すみません、少々席を外しておりました。なるほどと思いましたので、今から試してみます。ありがとうございます。

    キャンセル

回答 1

0

「Visual Stdio で デバッグ実行」で取得でき、「開発PCと同じPCにIIS」では取得できないということからの想像ですが、ワーカープロセスのアクセス権の問題だと思います。

「Visual Stdio で デバッグ実行」の際は、多分 Visual Studio を管理者権限で立ち上げ、ASP.NET 開発サーバーまたは IIS Express で Web アプリを動かしているのだと思いますが、その場合ワーカープロセスは管理者権限を持ってリソースにアクセスに行きます。

一方、「開発PCと同じPCにIIS」ではワーカープロセスはデフォルトでは権限の低いアクセス権しか持っていません。

アプリケーション プール ID
https://technet.microsoft.com/ja-jp/library/ee886292.aspx

ファイルの読み出し・書き込みなどですと、ワーカープロセスにそのファイルのあるディレクトリに対する読み取り・書き込み権限を与えるというのが解決手段です。具体例は、IIS6 の古い記事ですが、以下の通りです。 

How To: ASP.NET で Network Service アカウントを使用してリソースにアクセスする方法
https://msdn.microsoft.com/ja-jp/library/ms998320.aspx

ただ、証明書のストアに対して同様にアクセス権を与えるにはどうすればよいかは、自分としては全く未知の領域で、分からないです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

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

関連した質問

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

  • ASP.NET

    456questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

  • SSL

    434questions

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

  • IIS 7

    51questions

    IIS(インターネットインフォメーションサービス) 7は、 Microsoftによって開発された、Windowsの標準ウェブサーバーです。Window Server 2008 と Windows Vista向けにリリースされました。