Como usar um arquivo de certificado PKCS # 12 em um .NET WebRequest?
-
21-08-2019 - |
Pergunta
Eu tenho sido emitido um certificado PKCS # 12 para ser usado para acessar um simples serviço web baseado em XML. Quando eu carregar os arquivo PKCS # 12 no Windows (Vista), eu posso acessar o serviço usando o meu navegador.
Tentando acessar o serviço através de uma aplicação, sem carregar os PKCS # 12 nas coleções OS Certificado, eu escrevi o seguinte código:
// 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);
}
Infelizmente este código falha e eu recebo um System.Net.WebException: A solicitação foi anulada: Não foi possível criar SSL / TLS canal seguro. Tenho notado que quando eu faço carregar os arquivo PKCS # 12 no Windows, o código de repente funciona.
O que eu preciso fazer para fazer fazer com o arquivo sozinho e evitar o uso do armazenamento de certificados do Windows?
Obrigado, Boaz
Mais informações: Apenas aplicada SP1 ao meu Visual Studio e agora eu recebo uma exceção diferente: "Uma chamada para SSPI falhou, ver exceção Inner" com a uma exceção interna -> "A mensagem recebida foi inesperada ou mal formatado."
Solução
Você tem que ter o seu certificado instalado no Certificate Store. A maneira mais fácil é usar o IE e importar o certificado.