署名付きトークンを受け取るWebアプリケーションがあり、エンドユーザーのマシンにあらかじめインストールされている証明書でその署名を検証する必要があります。私は店にアクセスし、私が使用したいと思っている特定の証明書を取得したいと思います。今まで私は店に通ってその中の証明書を数えることができますが、特定の証明書を見つけることができません。Windows証明書ストア(C# - ASP.Net)から特定の証明書を探す
私の戦略は正確な必須証明書を選ぶのに十分なユニークなので、件名による証明書の検索結果をX509Certificate2Collection
で埋めることです。コレクションの最初の要素(うまくいけば唯一)を引き出し、これは私が下のコードでやっていることですが、これまでのところ、私はいつも例外としてcerts
が空で、何も文字列に変換できません。
シリアルナンバーで検索しても、証明書のシリアル番号が00で、私のストアに8つあります。
特定の証明書をストアから取得し、プログラムで使用するにはどうすればよいですか?
X509Store st0re = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
st0re.Open(OpenFlags.ReadOnly);
count = st0re.Certificates.Count; //Count the certificates in the store
X509Certificate2Collection certs = st0re.Certificates.Find(
X509FindType.FindBySubjectName,
"C=US, S=WA, L=Redmond, O=Microsoft Corporation, OU=Web Services",
true);
st0re.Close();
Output = certs[0].ToString(); // = count.ToString()
「エンドユーザのマシンで」 - つまり、リモートクライアントですか?地獄、いいえ!あなたが何か悪いことをしようとしているので、申し訳ありません。 Webアプリケーションはクライアントリソースにアクセスできません。そうしないでください。同様の質問に対する説明があります:https://stackoverflow.com/a/46707759/3997611 – Crypt32
私は何をしようとしているのかを明確にします。 私はサードパーティのSSOに接続された複数のWebアプリケーションを持っていますサーバーでは、ユーザーがURLに移動すると、そのSSOサーバーにリダイレクトされてログインし、署名されたCookieでリダイレクトされます。私は制限されたページに彼を放つ前に、そのクッキーを確認したい。だから私は証明書を読み込んでそれを使ってトークンの署名を検証したいだけです。 – j0zeft
上記のリンクを見てください。 Webアプリケーションでクライアントリソースにアクセスできない、またはアクセスしない理由を明確に説明しています。必要な情報は、Webアプリケーションで事前に設定するか、基盤プロトコルにそのような機能がある場合はクライアントから提供する必要があります。あなたの場合、Cookieに証明書が含まれていない場合は、ローカル(Webサーバー)証明書ストアを使用して署名を検証するために必要な証明書を取得する必要があります。 – Crypt32