Guy*_*tag 8 c# ssl client-certificates
在我的应用程序中,MY使用以下代码以编程方式将客户端身份验证证书添加到-Store:
//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();
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,证书已MY在我测试的所有计算机上正确导入-Store(指纹和认证链也正确).
但是在某些计算机(Windows 7 Professional SP1和带有本地用户帐户的Widnows Server 2008 R2)上,证书之后可能不会用于客户端身份验证("无法为SSL/TLS安全通道建立信任关系").在具有域用户帐户的Windows 8.1 Enterprise计算机上,身份验证有时会起作用,但并非总是如此.
我绝望地尝试了几件事,最后找到了添加X509KeyStorageFlags.PersistKeySet存储标志的解决方案.所以第一行现在是:
X509Certificate2 certificate = new X509Certificate2(certData, password, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
Run Code Online (Sandbox Code Playgroud)
使用这些标志,证书可以在所有设备上使用.即使我很高兴我的应用程序现在以预期的方式工作,我想了解原因?PersistKeySet-Flag究竟做了什么,为什么它会影响证书的使用时间和人员?
在这种情况下,MSDN不是很有用.
bar*_*njs 16
导入PFX时,公共证书元素将加载到内存中,私钥材料将被转移到密钥存储提供程序中..NET中的默认行为是在X509Certificate2对象为Disposed时删除私钥材料(或者其资源正在通过垃圾收集完成).该PersistKeySet标志可防止此清理发生.
如果要添加到持久性证书库,则始终要设置PersistKeySet.如果不添加到持久存储,您很可能不希望它设置.
如果您的导入过程是长期存在的,那么您看到的行为是在导入新访问私钥后的任意时间开始失败.如果它是短暂的,那么它可能总是无法工作.
| 归档时间: |
|
| 查看次数: |
3751 次 |
| 最近记录: |