我可以使用以下代码获取Windows-My商店中的证书:
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.IncludeArchived);
X509Certificate2Enumerator enumerator = store.Certificates.GetEnumerator();
// then I loop through the enumerator and store the certificates in a list
store.Close();
在我的应用中,用户选择证书,我必须要求输入密码。如果密码正确,用户可以输入应用程序的选项。我可以使用用户所选文件中的pfx或pkcs12证书来执行此操作:
X509Certificate2 cert = new X509Certificate2();
try
{
cert.Import(File.ReadAllBytes(pathToMyPfxCert), "my password", X509KeyStorageFlags.DefaultKeySet);
}
catch (CryptographicException)
{
//wrong password! :D
}
但是我不确定从Windows-My中选择证书是否可行。当我将Windows-My证书导出到pfx文件并使用错误的密码再次导入它时,我发出CryptographicException尖叫“网络密码无效”,但我没有例外,好像我输入了正确的密码。
请告诉我,如果我以错误的方式使用Windows-My证书,或者他们的设计方式不合适(我是x509中的新手)。
编辑:关于@CryptoGuy评论:
我同意:这有点奇怪,因为它有点实验性:我们想知道Windows-My Store证书是否可用于在桌面应用上登录而不是签署文档。 我的测试证书的配置方式是在签署文档时要求用户输入私钥的密码:
我用来签署文件并获取此对话框的应用程序是XolidoSign。
我想在我的应用程序中执行相同的操作:询问证书的密码(或其私钥的密码)并检查它以登录我的应用程序。