Как использовать файл сертификата PKCS # 12 в .NET WebRequest?

StackOverflow https://stackoverflow.com/questions/1063021

Вопрос

Мне был выдан сертификат 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?

Спасибо, Боаз

Подробная информация:Только что применил пакет обновления 1 к моей Visual Studio, и теперь я получаю другое исключение:"Сбой вызова SSPI, см. Внутреннее исключение" с внутренним исключением -> "Полученное сообщение было неожиданным или неправильно отформатировано".

Это было полезно?

Решение

Ваш сертификат должен быть установлен в хранилище сертификатов.Самый простой способ - использовать IE и импортировать сертификат.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top