Cómo utilizar un archivo de certificado PKCS # 12 en un .NET WebRequest?
-
21-08-2019 - |
Pregunta
Me han emitido un certificado PKCS # 12 que se utilizará para acceder a un servicio web simple basado en XML. Cuando cargo el archivo PKCS # 12 en Windows (Vista), puedo acceder al servicio a través de mi navegador.
El intentar acceder al servicio a través de una aplicación, sin cargar los PKCS # 12 en las colecciones de certificados OS, he escrito el siguiente 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);
}
Lamentablemente este código falla y me siento un System.NET.WebException: Se anuló la solicitud: No se pudo crear un canal seguro SSL / TLS. Me he dado cuenta que cuando lo haga cargar el archivo PKCS # 12 en Windows, el código funciona de repente.
¿Qué necesito hacer para que hacer con el archivo solo y evitar el uso del almacén de certificados de Windows?
Gracias, Boaz
Más información: acaba de aplicar SP1 a mi Visual Studio y ahora recibo una excepción diferente: "Una llamada a SSPI falló, vea Excepción interna" con el una excepción interna -> "El mensaje recibido fue inesperado o con formato incorrecto."
Solución
Se tiene que tener su certificado instalado en el almacén de certificados. La forma más sencilla es utilizar IE e importar el certificado.