C#中如何得到当前的windows证书实例 http://daiwen.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-771146-uid-55708.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我看了你的方法,但是有没有简单点的,直接在程序里面得到当前windows证书?? 你没仔细看这个帖子下面的吧?3.2.1 从证书文件导入证书存储区l 读取证书放入证书对象Framework2.0中myX509Certificate2类代表了证书。//从证书文件载入证书,如果含有私钥的,需要提供保存证书时设置的密码X509Certificate2 myX509Certificate2 = new X509Certificate2( @"C:\Samples\PartnerAEncryptMsg\MyTestCert.pfx", //证书路径 "password", //证书的私钥保护密码 X509KeyStorageFlags.Exportable //表示此证书的私钥以后还可以导出 );X509Certificate2l 建立相应的存储区对象并保存证书Framework2.0中X509Store类表示证书存储区,前面讨论过证书存储区,证书存储区实际是个层次结构,第一层是存储位置storeLocation,第二个层次是存储区storeName,X509Store实际上代表的是某个存储位置下的某个存储区。新建一个存储区X509Store并把上面的证书对象存入其中://新建指向当前用户,个人证书存贮区的X509Store对象X509Store store = new X509Store(StoreName.My,StoreLocation.CurrentUser);store.Open(OpenFlags.ReadWrite);store.Add(myX509Certificate2);store.Close();这样,证书导入到了当前用户的个人证书存储区内。3.2.2 从证书存储区导出为证书文件再将上面导入到当前用户的个人证书存储区内的证书导出为证书文件://新建指向当前用户,个人证书存贮区的X509Store对象X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);store.Open(OpenFlags.ReadOnly);//轮询存储区中的所有证书foreach(X509Certificate2 myX509Certificate2 in store.Certificates){ //将证书的名称跟要导出的证书MyTestCert比较,找到要导出的证书 if (myX509Certificate2.Subject == "CN=MyTestCert") { //证书导出到byte[]中,password为私钥保护密码 byte[] CertByte = myX509Certificate2.Export(X509ContentType.Pfx,"password"); //将证书的字节流写入到证书文件 FileStream fStream = new FileStream( @"C:\Samples\PartnerAEncryptMsg\MyTestCert_Exp.pfx", FileMode.Create, FileAccess.Write); fStream.Write(CertByte, 0, CertByte.Length); fStream.Close(); }}store.Close();注意如果要导出为不含私钥的cer证书,第一个参数使用X509ContentType.Cert,表示导出为不含私钥的cer证书,也就不需要密码了byte[] CertByte = myX509Certificate2.Export(X509ContentType.Cert);X509Certificate2类的Export方法,第一个参数X509ContentType.Pfx表示要导出为含有私钥的pfx证书形式,第二个参数为私钥保护密码。 构造函数中X509KeyStorageFlags.Exportable参数,相当于在工具交互导入证书时选择了“标识此密钥为可导出”,如果构造函数中不加这个参数,证书的私钥将不可导出。 以后不管这个证书被导入到哪个存储位,默认的私钥都被保存到CurrentUser,如果需要把私钥保存到LocalMachine,第三个参数应该是这样:X509KeyStorageFlags.Exportable| X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet命令的详细说明请参看微软Makecert.exe工具的文档:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp 那如果我在客户端设置了密钥,那WebService端能知道我的密钥吗??? http://blog.csdn.net/luminji/archive/2009/03/05/3960308.aspx 关于 不同程序集下,二进制序列化与反序列化的问题 Request.QueryString传递字符转译问题 串口收不到信息why 求一个正则表达式 winforms中的c#水晶报表 不知道有人知道这个问题不? XX信息管理系统的数据库怎么设计比较好? 查找字符串中字符的位置 如何获取一个指定字体所使用的Unicode Range,比如说宋体、新罗马字体等 发生了UnauthorizedAccessException错误怎么办啊? C#中,如何返回使用Insert语句插入记录的ID号 Windows 服务问题
l 读取证书放入证书对象Framework2.0中myX509Certificate2类代表了证书。//从证书文件载入证书,如果含有私钥的,需要提供保存证书时设置的密码X509Certificate2 myX509Certificate2 = new X509Certificate2( @"C:\Samples\PartnerAEncryptMsg\MyTestCert.pfx", //证书路径 "password", //证书的私钥保护密码 X509KeyStorageFlags.Exportable //表示此证书的私钥以后还可以导出 );X509Certificate2
l 建立相应的存储区对象并保存证书Framework2.0中X509Store类表示证书存储区,前面讨论过证书存储区,证书存储区实际是个层次结构,第一层是存储位置storeLocation,第二个层次是存储区storeName,X509Store实际上代表的是某个存储位置下的某个存储区。新建一个存储区X509Store并把上面的证书对象存入其中://新建指向当前用户,个人证书存贮区的X509Store对象X509Store store = new X509Store(StoreName.My,StoreLocation.CurrentUser);store.Open(OpenFlags.ReadWrite);store.Add(myX509Certificate2);store.Close();这样,证书导入到了当前用户的个人证书存储区内。
3.2.2 从证书存储区导出为证书文件
再将上面导入到当前用户的个人证书存储区内的证书导出为证书文件://新建指向当前用户,个人证书存贮区的X509Store对象X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);store.Open(OpenFlags.ReadOnly);//轮询存储区中的所有证书foreach(X509Certificate2 myX509Certificate2 in store.Certificates){ //将证书的名称跟要导出的证书MyTestCert比较,找到要导出的证书 if (myX509Certificate2.Subject == "CN=MyTestCert") { //证书导出到byte[]中,password为私钥保护密码 byte[] CertByte = myX509Certificate2.Export(X509ContentType.Pfx,"password"); //将证书的字节流写入到证书文件 FileStream fStream = new FileStream( @"C:\Samples\PartnerAEncryptMsg\MyTestCert_Exp.pfx", FileMode.Create, FileAccess.Write); fStream.Write(CertByte, 0, CertByte.Length); fStream.Close(); }}store.Close();注意
如果要导出为不含私钥的cer证书,第一个参数使用X509ContentType.Cert,表示导出为不含私钥的cer证书,也就不需要密码了byte[] CertByte = myX509Certificate2.Export(X509ContentType.Cert);X509Certificate2类的Export方法,第一个参数X509ContentType.Pfx表示要导出为含有私钥的pfx证书形式,第二个参数为私钥保护密码。
构造函数中X509KeyStorageFlags.Exportable参数,相当于在工具交互导入证书时选择了“标识此密钥为可导出”,如果构造函数中不加这个参数,证书的私钥将不可导出。
以后不管这个证书被导入到哪个存储位,默认的私钥都被保存到CurrentUser,如果需要把私钥保存到LocalMachine,第三个参数应该是这样:X509KeyStorageFlags.Exportable| X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet命令的详细说明请参看微软Makecert.exe工具的文档:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp