विंडोज फोन 8.1 पर यह HttpClient के साथ-साथ StreamSocket (जैसा माइक सुझाया गया है) के साथ किया जा सकता है।
StreamSocket के साथ प्रमाणपत्र सत्यापन के लिए उदाहरण here (स्रोत कोड में परिदृश्य 5_Certificate) पाया जा सकता है।
HttpClient साथ
प्रमाणपत्र सत्यापन ERROR_INTERNET_INVALID_CA अपवाद हैंडलिंग, HttpTransportInformation वर्ग का उपयोग कर सर्वर प्रमाणपत्र सत्यापित करने, HttpBaseProtocolFilter वर्ग के नया उदाहरण बनाने और त्रुटियों को अनदेखा करने के लिए निर्दिष्ट करके किया जा सकता है।
ध्यान दें कि सभी त्रुटियां अनजान नहीं हैं।यदि आप सफलता, निरस्त, अमान्य हस्ताक्षर, अमान्य प्रमाण पत्र प्राधिकरण नीति, बेसिक कॉन्स्ट्रेनेंट त्रुटि, अज्ञात क्रिटिकल एक्सटेंशन या अन्य त्रुटि एनम मान जोड़ने का प्रयास करेंगे, तो आपको अपवाद प्राप्त होगा।
मैं HttpClient का उपयोग कर एक नमूना कोड है कि प्रमाणपत्र में त्रुटियाँ नजरअंदाज जोड़ रहा:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
using Windows.Security.Cryptography.Certificates;
using Windows.Web.Http;
using Windows.Web.Http.Filters;
namespace Example.App
{
public class HttpsHandler
{
private const int ERROR_INTERNET_INVALID_CA = -2147012851; // 0x80072f0d
public static async void HttpsWithCertificateValidation()
{
Uri resourceUri;
if (!Uri.TryCreate("https://www.pcwebshop.co.uk/", UriKind.Absolute, out resourceUri))
return;
IReadOnlyList<ChainValidationResult> serverErrors = await DoGet(null, resourceUri);
if (serverErrors != null)
{
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
foreach (ChainValidationResult value in serverErrors)
{
try {
filter.IgnorableServerCertificateErrors.Add(value);
} catch (Exception ex) {
// Note: the following values can't be ignorable:
// Success Revoked InvalidSignature InvalidCertificateAuthorityPolicy
// BasicConstraintsError UnknownCriticalExtension OtherErrors
Debug.WriteLine(value + " can't be ignorable");
}
}
await DoGet(filter, resourceUri);
}
}
private static async Task<IReadOnlyList<ChainValidationResult>> DoGet(HttpBaseProtocolFilter filter, Uri resourceUri)
{
HttpClient httpClient;
if (filter != null)
httpClient = new HttpClient(filter);
else
httpClient = new HttpClient();
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, resourceUri);
bool hadCertificateException = false;
HttpResponseMessage response;
String responseBody;
try {
response = await httpClient.SendRequestAsync(requestMessage);
response.EnsureSuccessStatusCode();
responseBody = await response.Content.ReadAsStringAsync();
} catch (Exception ex) {
hadCertificateException = ex.HResult == ERROR_INTERNET_INVALID_CA;
}
return hadCertificateException ? requestMessage.TransportInformation.ServerCertificateErrors : null;
}
}
}
स्रोत
2014-09-08 13:04:41
StreamSocket.Information.ServerCertificate संपत्ति विंडोज फोन 8.1 में जोड़ा गया है! –