我正在使用Windows Mobile 6,并且想与Apache Web服务器通信时进行客户端身份验证。我在本地证书存储区中有一个证书,应该很简单:

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();

只要我删除“req.ClientCertificates.Add(clientcertificate)”行,此代码段就可以工作。

插入后,我得到“无法为SSL/TLS建立安全 channel ”。足够令人着迷的是,当我在常规的.Net Framework中使用此确切的代码时,它可以完美地传输证书。

有谁知道在Compact Framework中是否可行?如果我不能出示用于客户端身份验证的X509证书,则应采取什么其他方式来确保身份验证正确(我应该可以访问CAPI或其他Microsoft加密模块)

谢谢。

最佳答案

可能是您的Apache服务器不支持安全连接。

例如,我在托管域名上有一些网站,这些网站几乎不花钱,甚至不花钱。我一直在使用这些网站来测试代码。

但是,要获得SSL功能,我必须支付每月50美元的费用。因此,我无法在自己的网站上对其进行测试。

测试:如果Apache服务器支持SSL,则您应该能够将URL替换为等效的SSL:http://www.stackoverflow.comhttps://www.stackoverflow.com

10-08 06:42
查看更多