2009-06-30 4 views
1

Я получил сертификат PKCS № 12, который будет использоваться для доступа к простой веб-службе на основе xml. Когда я загружаю файл PKCS # 12 в Windows (Vista), я могу получить доступ к сервису с помощью моего браузера.Как использовать файл сертификата PKCS # 12 в .NET WebRequest?

Попытка доступа к услуге через приложение, без загрузки PKCS # 12 в коллекции OS сертификата, я написал следующий код:

// 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 и теперь я получаю другое исключение: «Призыв к ССПИ не удалось, см Inner исключение» с внутренним Exception -> « полученное сообщение было неожиданным или плохо отформатированным ».

ответ

2

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