有人问起怎么在.NET 1.1里面用byte[]创建X509Certificate实例,以及怎么用X509Certificate来访问需要客户端证书的Web Service。MSDN里面对.NET 1.1里面怎么用证书讲的不是很完整,虽然有例子代码,但是第一次用的人还是需要费一番精神才能搞出来。我从硬盘里找了段以前的code给了他,顺便也在这里贴一下,也好让各种搜索引擎访问到:
//.net 1.1 version
bdk bd = new bdk();
StreamReader reader = new StreamReader(path); //path of .cer file
string certbody = reader.ReadToEnd();
certbody =certbody.Replace("-----END CERTIFICATE-----","");
certbody=certbody.Replace("-----BEGIN CERTIFICATE-----","");
certbody=certbody.Replace("/r/n",""); // Get client certificate
byte[] certbytes = System.Convert.FromBase64String(certbody);
X509Certificate cert = new X509Certificate(certbytes);
bd.ClientCertificates.Clear();
bd.ClientCertificates.Add(cert); //Then we can TestConnection //if failed , TestConnection will throw an SoapException, try to catch it
string aa;
bd.TestConnection( "input", out aa);
这里的.cer文件是从Certificates MMC里面export出来的,或者也可以从IE的option里面导出。导出时候要选择"Not to export private key",用"Base64 Encode"格式导出。这里的"bdk"类就是一个Web Service的proxy类,TestConnection()是一个WebMethod。
在.NET 2.0里面,代码就可以简洁得多了,只需要一个调用就可以了,不需要自己手工读文件、去头去尾以及转换成byte[]了。