Tôi đang làm việc trong Windows Mobile 6 và muốn có xác thực ứng dụng khách khi nói chuyện với máy chủ web Apache. Tôi có một chứng chỉ trong kho chứng chỉ nội của tôi và nó nên được khá đơn giản:Sử dụng Chứng chỉ X509 trong .Net Compact Framework cho Xác thực Máy khách 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();
Mã này phân khúc làm việc miễn là tôi loại bỏ các "req.ClientCertificates.Add (clientcertificate)" dòng.
Khi được chèn, tôi nhận được thông báo "Không thể thiết lập kênh bảo mật cho SSL/TLS". Maddeningly đủ, khi tôi sử dụng mã này chính xác trong thường xuyên. Net Framework nó truyền giấy chứng nhận hoàn hảo.
Có ai biết nếu điều này có thể thực hiện trong Compact Framework không? Nếu tôi không thể trình bày X509Certificate để Xác thực Khách hàng, tôi nên theo đuổi những cách nào khác để đảm bảo xác thực là đúng (tôi nên có quyền truy cập vào CAPI hoặc các mô-đun mã hóa Microsoft khác)
Cảm ơn.
Hãy xem tài sản [ServicePointManager.CertificatePolicy] (http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.certificatepolicy%28v=vs.90%29.aspx) và giao diện [ICertificatePolicy] (http://msdn.microsoft.com/en-us/library/system.net.icertificatepolicy%28v=vs.90%29.aspx). –
Cảm ơn bạn đã trả lời. Tôi đã cài đặt các chứng chỉ trung gian cũng như thêm mã vào ICertificatePolicy để cho phép tất cả các chứng chỉ, cùng một vấn đề. –