2017-08-18 223 views
0

我正在嘗試開發ASP.Net Web應用程序來接受智能卡身份驗證。我已經創建了Web應用程序,並將它部署在IIS中。根證書安裝在由CA授權的IIS計算機可信根目錄中。對於該Web應用程序,我添加了服務器證書,設置了要求SSL並將其設置爲接受證書。 當客戶端訪問該Web應用程序時,它會提示客戶端證書,chrome會提示客戶端證書,將智能卡插入客戶端計算機,並且當PIN被詢問時,用戶輸入有效的PIN碼,並且我能夠獲得網絡應用程序。直到這一切都按預期工作,但此時我想讀取客戶端證書並希望使用證書鏈驗證該客戶端。此外,基於客戶端證書,我想獲取該用戶的角色。每次我嘗試閱讀客戶端證書時,我都無法獲得證書。下面是代碼讀取智能卡證書:我們可以在客戶端服務器架構中使用智能卡身份驗證嗎?

`

X509Store store = null; 
store = new X509Store(StoreName.Root); 
store.Open(OpenFlags.ReadOnly); 
var certsAuthEnc = store.Certificates.Find(X509FindType.FindByKeyUsage, (int)CertificateType.DigitalSignature, false); 

`

這裏,store.Certificates.Count即將爲0

請幫幫忙,我怎麼能閱讀客戶端證書?

回答

0

我得到了客戶證書,但沒有下文私鑰: var x509 = new X509Certificate2(this.Request.ClientCertificate.Certificate);

此證書可與鏈進行驗證。

0

在您的示例中,您打開當前用戶「Root」商店,但我不清楚爲什麼給出您的描述。此存儲僅包含由管理員和當前用戶配置的受信任根的列表。

當前用戶的證書將位於「我的」商店中,如果這是您正在尋找的。

如果您想驗證ASP.NET應用程序上下文中的當前用戶證書,出於某種原因,您希望使用X509Chain(https://www.google.com/search?q=X509Chain&oq=X509Chain&aqs=chrome..69i57.318j0j7&sourceid=chrome&ie=UTF-8)而不是X509Store。

這個職位將可能也是有幫助的:https://msdn.microsoft.com/en-us/library/ms148581(v=vs.110).aspx

瑞安

+0

感謝您的幫助,爲什麼我指的是根位置,我的登錄窗口位於服務器端,位於我的IIS服務器上,證書安裝在根位置。 基本上,我所看到的是,在我的ASP .Net網絡應用程序中,當PIN被驗證時,我應該得到該數字簽名數據以驗證下一步如果用戶在當前時間戳中有效等。 我怎樣才能得到當用戶輸入PIN碼時數字簽名的數據? –

+0

根存儲只是一個自簽名根證書列表,您認爲「本地計算機」範圍不是「根存儲」。但是,正如我所說的,您不希望查看您希望驗證客戶端呈現的鏈的信任錨的列表。 – rmhrisk

相關問題