
###問題
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の機能にある認証機能マッピングを使いたいわけではありません。