如何在.NET WebRequest中使用PKCS#12证书文件?

时间:2009-06-30 10:45:28

标签: .net security https certificate pkcs#12

我已经获得了一个PKCS#12证书,用于访问基于xml的简单Web服务。当我将PKCS#12文件加载到Windows(Vista)中时,我可以使用我的浏览器访问该服务。

尝试通过应用程序访问服务,而不将PKCS#12加载到OS证书集合中,我编写了以下代码:

// The certificate i'm using can not be authenticated as it is a development one. 
// For now, just ignore it.
static bool myRemoteCertificateValidationCallback(
         Object sender,
         X509Certificate certificate,
         X509Chain chain,
         SslPolicyErrors sslPolicyErrors
)
{ return true; }

static void Main(string[] args)
{
    ServicePointManager.ServerCertificateValidationCallback = myRemoteCertificateValidationCallback;
    X509Certificate Cert = new X509Certificate(@"certificatefile.p12","medialab");
    HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("https://ServiceURL");
    Req.ClientCertificates.Add(Cert);

    Stream S = Req.GetResponse().GetResponseStream();
    TextReader TR = new StreamReader(S);
    string Ret = TR.ReadToEnd();
    Console.Write(Ret);

}

遗憾的是,此代码失败,我收到System.Net.WebException:请求已中止:无法创建SSL / TLS安全通道。我注意到,当我将PKCS#12文件加载到Windows中时,代码突然运行。

我需要做什么才能单独处理文件并避免使用Windows证书存储?

谢谢, 波阿斯

更多信息:刚刚将SP1应用到我的Visual Studio中,现在我得到了一个不同的例外:“对SSPI的调用失败,请参阅内部异常”,内部异常 - > “收到的消息是意外的或格式错误。”

1 个答案:

答案 0 :(得分:2)

您必须在证书库中安装证书。最简单的方法是使用IE并导入证书。