Come utilizzare un file di certificato PKCS # 12 in una WebRequest .NET?
-
21-08-2019 - |
Domanda
Mi è stato rilasciato un certificato PKCS # 12 da utilizzare per l'accesso a un semplice servizio web basato su XML. Quando carico il file PKCS # 12 in Windows (Vista), posso accedere al servizio utilizzando il mio browser.
Il tentativo di accedere al servizio tramite un'applicazione, senza caricare le PKCS # 12 nelle collezioni OS certificati, ho scritto il seguente codice:
// 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);
}
Purtroppo questo codice non riesce e ottengo uno System.Net.WebException: La richiesta è stata interrotta: Impossibile creare SSL / TLS canale sicuro. Ho notato che quando faccio caricare il file di PKCS # 12 in Windows, il codice funziona improvvisamente.
Che cosa devo fare per fare che fare con il file da solo ed evitare di utilizzare l'archivio certificati di Windows?
Grazie, Boaz
Più informazioni: appena applicato SP1 al mio Visual Studio e ora ricevo un'eccezione diversa: "Una chiamata a SSPI non è riuscita, vedere Eccezione interna" con l'un'eccezione interna -> "Il messaggio ricevuto era imprevisto o formattato."
Soluzione
È necessario avere il certificato installato in Archivio certificati. Il modo più semplice è quello di utilizzare IE e importare il certificato.