我有一個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服務器,當用戶導航到一個URL時,他被重定向到該SSO服務器以登錄,並用一個簽名的cookie重定向回來。我想在我讓他進入我的受限制頁面之前驗證該cookie。所以我只想加載證書並使用它來驗證令牌簽名。 – j0zeft
看看上面的鏈接。它清楚地解釋了爲什麼你不能在Web應用程序中訪問客戶端資源。必需的信息必須預先配置在Web應用程序中,或者如果底層協議具有此功能,則由客戶端提供。在你的情況下,如果cookie不包括證書,那麼你必須使用本地(web服務器)證書存儲來獲得所需的證書來驗證簽名。 – Crypt32