如果证书保存在计算机的证书存储区(Certificate Store)中,我们就需要使用另一个对象X509Store来访问证书存储区。根据访问权限,证书存储区分为当前用户(Current User)和本地计算机(Local Machine)两个部分,前者用来保存当前登录的用户所能使用的数字证书,而后者用来保存登录到本机所能使用的数字证书。不管是当前用户还是本地计算机,都包含多个逻辑存储区,它们通过不同的名称来区分,每个逻辑存储区可以保存多个数字证书。更详细的介绍,可以参考证书 <http://technet.microsoft.com/zh-cn/library/cc784662%28WS.10%29.aspx>。具体的访问证书存储区的代码如下:
1: private X509Certificate2 GetCertificate(string CertName) 2: { 3: //声明X509Store对象,指定存储区的名称和存储区的类型 4: //StoreName中定义了系统默认的一些存储区的逻辑名称 5: X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 6: //以只读的方式打开这个存储区,OpenFlags定义的打开的方式 7: store.Open(OpenFlags.ReadOnly); 8: //获取这个存储区中的数字证书的集合 9: X509Certificate2Collection certCol = store.Certificates; 10: //查找满足证书名称的证书并返回 11: foreach (X509Certificate2 cert in certCol) 12: { 13: if (cert.SubjectName.Name == "CN=" + CertName) 14: { 15: store.Close(); 16: return cert; 17: } 18: } 19: store.Close(); 20: return null; 21: } |
我们也可以通过X509Certificate2Collection 对象在当前存储区中添加删除证书。
上面的介绍是我自己对密钥保存的一些理解,大家可以根据的具体情况,去选择具体的方法,希望对大家有所帮助。如果哪位大神有更好的方法,希望留下你的方法共我们学习。