Как использовать файл сертификата PKCS # 12 в .NET WebRequest? - PullRequest
1 голос
/ 30 июня 2009

Мне выдан сертификат 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, см. Внутреннее исключение» с внутренним исключением -> «Полученное сообщение было неожиданным или плохо отформатировано»

1 Ответ

2 голосов
/ 04 января 2010

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

...