Мне выдан сертификат PKCS # 12, который будет использоваться для доступа к простому веб-сервису на основе xml. Когда я загружаю файл PKCS # 12 в Windows (Vista), я могу получить доступ к службе через мой браузер.
Пытаясь получить доступ к службе через приложение, не загружая PKCS # 12 в коллекции сертификатов ОС, я написал следующий код:
// The certificate i'm using can not be authenticated as it is a development one.
// For now, just ignore it.
static bool myRemoteCertificateValidationCallback(
Object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors
)
{ return true; }
static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback = myRemoteCertificateValidationCallback;
X509Certificate Cert = new X509Certificate(@"certificatefile.p12","medialab");
HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("https://ServiceURL");
Req.ClientCertificates.Add(Cert);
Stream S = Req.GetResponse().GetResponseStream();
TextReader TR = new StreamReader(S);
string Ret = TR.ReadToEnd();
Console.Write(Ret);
}
К сожалению, этот код не работает, и я получаю System.Net.WebException: запрос был прерван: не удалось создать безопасный канал SSL / TLS. Я заметил, что когда я загружаю файл PKCS # 12 в Windows, код неожиданно работает.
Что мне нужно сделать, чтобы использовать только один файл и не использовать хранилище сертификатов Windows?
Спасибо,
Боаз
Дополнительная информация: Просто применил SP1 к моей Visual Studio, и теперь я получаю другое исключение: «Ошибка вызова SSPI, см. Внутреннее исключение» с внутренним исключением -> «Полученное сообщение было неожиданным или плохо отформатировано»