当前位置:编程学习 > C#/ASP.NET >>

C#中如何得到当前的windows证书实例

JPTCOM.Dal.JPWS_PT.JPWS_PTSoapClient _serviceClient = new JPTCOM.Dal.JPWS_PT.JPWS_PTSoapClient();
X509Certificate2 cert = new X509Certificate2("C:\\Documents and \\Administrator\\Recent\\bmcertificates.cer");
_serviceClient.ClientCredentials.ClientCertificate.Certificate = cert;

这样写报错,无法找到指定的文件。我想得到windows的安全证书,请问怎么得到???? --------------------编程问答-------------------- http://daiwen.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-771146-uid-55708.html --------------------编程问答-------------------- 我看了你的方法,但是有没有简单点的,直接在程序里面得到当前windows证书?? --------------------编程问答-------------------- 你没仔细看这个帖子下面的吧?

3.2.1   从证书文件导入证书存储区
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
--------------------编程问答-------------------- 那如果我在客户端设置了密钥,那WebService端能知道我的密钥吗??? --------------------编程问答-------------------- http://blog.csdn.net/luminji/archive/2009/03/05/3960308.aspx
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,