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

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

新規登録して質問してみよう
ただいま回答率
85.50%
IIS 7

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

SSL

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

ASP.NET

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

Q&A

1回答

6410閲覧

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

siritaidake

総合スコア8

IIS 7

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

SSL

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

ASP.NET

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

0グッド

0クリップ

投稿2017/01/06 03:40

編集2022/01/12 10:55

###問題
0. クライアント証明書を取得できない。
Visual Stdio で デバッグ実行を行うと、後述のソースで、自PCにインストールされた証明書各種を取得できます。
しかし、開発PCと同じPCにIISを立てて、そちらにサイトを構築して、サイトにアクセスすると証明書が一つも取得できません。
0. 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の機能にある認証機能マッピングを使いたいわけではありません。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/06 04:30

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

2017/01/06 06:30

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

回答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

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

投稿2017/01/06 04:08

編集2017/01/06 04:10
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問