我正在使用Windows Mobile 6,并希望在与Apache Web服务器交谈时进行客户端身份验证。我有一个证书在我的本地证书存储,它应该是相当简单:只要我删除了“req.ClientCertificates.Add(clientcertificate)”行在.Net Compact Framework中使用X509证书进行客户端身份验证HTTPRequest
X509Store myStore = new X509Store("MY", StoreLocation.CurrentUser);
myStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certificates = myStore.Certificates;
X509Certificate2 clientcertificate;
foreach (X509Certificate 2certificate in certificates) {
clientcertificate = certificate; //omitted code to validate certificate
}
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(webPage);
req.AllowWriteStreamBuffering = true;
req.AllowAutoRedirect = false;
req.Method = "POST";
req.ContentType = "text/xml";
req.Accept = "text/xml";
req.ClientCertificates.Add(clientcertificate);
Stream stream = req.GetRequestStream();
stream.Write(buffer, 0, buffer.Length);
stream.Close();
此代码段工作。
一旦插入,就会出现“无法为SSL/TLS建立安全通道”。令人毛骨悚然的是,当我在常规的.Net框架中使用这个确切的代码时,它完美地传送证书。
有没有人知道这是否可以在Compact Framework?如果我无法提供用于客户端身份验证的X509证书,还应该采取哪些其他方式来确保身份验证是正确的(我应该可以访问CAPI或其他Microsoft加密模块)
谢谢。
查看[ServicePointManager.CertificatePolicy](http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.certificatepolicy%28v=vs.90%29.aspx)属性和[ICertificatePolicy](http://msdn.microsoft.com/en-us/library/system.net.icertificatepolicy%28v=vs.90%29.aspx)接口。 –
谢谢你的回复。我已经安装了中间证书以及将代码添加到ICertificatePolicy以允许所有证书,同样的问题。 –