2012-03-21 82 views
8

我正在開發ASP.NET 4.0 Web應用程序,我想從X509Store讀取當前用戶證書。讀取LocalMachine證書工作正常,但如果我將StoreLocation設置爲CurrentUser,它會給我一個空集合。無法從X509Store讀取CurrentUser證書

下面的代碼工作正常:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); // StoreLocation.CurrentUser 
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 

我檢查了我的個人存儲(通過certmgr.mmc),我敢肯定,我有證書。

我錯過了什麼? (store.Certificates爲空)

+0

應用程序是否以您的身份運行? – 2012-03-21 16:23:09

+0

該應用程序託管在我的本地IIS(7.5)上。應用程序池設置爲ApplicationPoolIdentity。 – 2012-03-21 18:10:00

+1

...那麼CurrentUser將是應用程序池,而不是你。 – 2012-03-21 19:57:56

回答

2

無論您使用的是什麼應用程序池標識,您都無法通過Web應用程序訪問個人證書存儲。

它是有道理的,一個Web應用程序無法訪問該位置。 :)

我的解決辦法:

我開發的ActiveX控件,我認爲它來訪問存儲的唯一途徑。 (另外,Java Applet提供相同的功能)。 我使用通過JavaScript的ActiveX控件訪問存儲,並將該信息發送到服務器。

0

如果您的工作進程無法訪問cert store,可能只是帳戶設置問題。嘗試進入IIS配置,打開ApplicationPools,右鍵單擊你的,選擇高級,然後嘗試將LoadUserProfile設置爲TRUE。然後重新啓動游泳池。它爲我工作 - 在使用私鑰加載.PFX時沒有更多的例外情況。

0

我有類似的問題。解決方案是:

IIS管理 - > [您的虛擬目錄] - >身份驗證 - >匿名身份驗證(選擇然後單擊「編輯...」)並將其更改爲使用「應用程序池標識」。

否則它可能作爲通用「IUSR」運行