Как использовать файл сертификата PKCS # 12 в .NET WebRequest?
-
21-08-2019 - |
Вопрос
Мне был выдан сертификат 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 и импортировать сертификат.