2017-10-19 119 views
0

我有一個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() 
+0

'最終用戶的機器' - 你的意思是,遠程客戶端?一定不行!沒辦法,對不起,因爲你想做錯事。 Web應用程序無法訪問客戶端資源。不應該。有一個類似的問題解釋迴應:https://stackoverflow.com/a/46707759/3997611 – Crypt32

+0

我會澄清我想要做什麼.. 我有多個網絡應用程序,連接到第三方SSO服務器,當用戶導航到一個URL時,他被重定向到該SSO服務器以登錄,並用一個簽名的cookie重定向回來。我想在我讓他進入我的受限制頁面之前驗證該cookie。所以我只想加載證書並使用它來驗證令牌簽名。 – j0zeft

+0

看看上面的鏈接。它清楚地解釋了爲什麼你不能在Web應用程序中訪問客戶端資源。必需的信息必須預先配置在Web應用程序中,或者如果底層協議具有此功能,則由客戶端提供。在你的情況下,如果cookie不包括證書,那麼你必須使用本地(web服務器)證書存儲來獲得所需的證書來驗證簽名。 – Crypt32

回答

0

從@ Crypt32考慮的建議後,我搬到我的令牌到應用程序將被託管,所以這樣一來我不是在尋找最終用戶的計算機上的證書,而是它會在本地存儲在託管應用程序的服務器上。要搜索的令牌,我在問題中使用完全相同的代碼在那裏與非常輕微編輯:

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.FindBySubjectDistinguishedName, 
      "C=US, S=WA, L=Redmond, O=Microsoft Corporation, OU=Web Services", 
      true); 
     st0re.Close(); 

     Output = certs[0].ToString();  // = count.ToString() 

我所做的只是與X509FindType.FindBySubjectDistinguishedName 更換X509FindType.FindBySubjectName在這種情況下,在證書主題的所有元素必須以該確切格式列出。

相關問題