我正在使用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以允許所有證書,同樣的問題。 –