在我的应用程序,为客户端身份验证的证书被编程使用下面的代码添加到MY
-store的影响:什么是'PersistKeySet`-StorageFlag在C#中导入证书时
//certData is a byte[]
//password is a SecureString
X509Certificate2 certificate = new X509Certificate2(certData, password, X509KeyStorageFlags.Exportable);
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
{
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
}
finally
{
store.Close();
}
使用此代码,证书已正确导入MY
-在我测试的所有机器上的存储(指纹和认证链也正确)。 (“无法为SSL/TLS安全通道建立信任关系”)。 在具有域用户帐户的Windows 8.1企业计算机上,身份验证有时会但并非总是有效。
我绝对尝试了几件事,终于找到了将X509KeyStorageFlags.PersistKeySet
添加到存储标志的解决方案。 所以,第一行是现在:
X509Certificate2 certificate = new X509Certificate2(certData, password, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
有了这些标志,证书可以在所有设备上使用。 即使我很高兴我的应用程序现在能以预期的方式工作,但我想了解为什么? PersistKeySet-Flag究竟做了什么以及它为什么会影响何时以及由谁来使用证书?
MSDN在这种情况下不是很有帮助。
可能与安装在临时容器中而不是永久容器中的密钥相关。详情请看这里:https://support.microsoft.com/en-gb/kb/950090 – momar