有人问起怎么在.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[]了。