Comment utiliser un fichier de certificat PKCS # 12 dans un WebRequest .NET?
-
21-08-2019 - |
Question
J'ai été délivré un certificat PKCS # 12 à utiliser pour accéder à un service Web simple basé sur XML. Quand je charge le fichier PKCS # 12 sous Windows (Vista), je peux accéder au service à l'aide de mon navigateur.
Essayer d'accéder au service via une application, sans charger les PKCS # 12 dans les collections OS certificat, je l'ai écrit le code suivant:
// 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);
}
Malheureusement, ce code échoue et je reçois un System.Net.WebException: La demande a été abandonnée: Impossible de créer un canal sécurisé SSL / TLS. J'ai remarqué que quand je fais charger le fichier PKCS # 12 dans Windows, le code fonctionne soudainement.
Que dois-je faire pour faire avec le fichier seul et évitez d'utiliser le magasin de certificats Windows?
Merci, Boaz
Plus d'infos: Juste appliqué SP1 à mon Visual Studio et maintenant je reçois une autre exception: « Un appel à SSPI a échoué, sauf exception intérieure » avec l'une exception intérieure -> « Le message reçu était inattendu ou mal formaté. »
La solution
Vous devez avoir votre certificat installé dans le magasin de certificats. La façon la plus simple est d'utiliser IE et importer le certificat.