2010-03-20 4 views
2

J'essaie de transmettre un certificat client à un serveur en utilisant le code ci-dessous mais je relance toujours l'erreur HTTP 403.7 - Forbidden: un certificat client SSL est requis. Quelles sont les raisons possibles pour lesquelles HttpWebRequest n'enverrait pas le certificat client?Envoi d'un certificat client dans HttpWebRequest

var clientCertificate = new X509Certificate2(@"C:\Development\TestClient.pfx", "bob"); 

        HttpWebRequest tRequest = (HttpWebRequest)WebRequest.Create("https://ofxtest.com/ofxr.dll"); 

        tRequest.ClientCertificates.Add(clientCertificate); 
        tRequest.PreAuthenticate = true; 
        tRequest.KeepAlive = true; 
        tRequest.Credentials = CredentialCache.DefaultCredentials; 
        tRequest.Method = "POST"; 
        var encoder = new ASCIIEncoding(); 
        var requestData = encoder.GetBytes("<OFX></OFX>"); 

        tRequest.GetRequestStream().Write(requestData, 0, requestData.Length); 
        tRequest.GetRequestStream().Close(); 

        ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CertPolicy.ValidateServerCertificate); 
        WriteResponse(tRequest.GetResponse()); 

Répondre

0

Il pourrait être le mauvais cert, pourraient manquer cert, etc .. Utilisez Fiddler (gratuit) comme proxy pour intercepter le trafic, et vous verrez si le cert est attaché ou non.

+0

J'ai utilisé le fiddler et je ne vois aucune indication du CERT client sur la demande de connexion initiale. J'ai ce cert travaillant dans une application de test de mfc donc il semble que quelque chose avec .net n'aime pas quelque chose. –

+0

Vous pouvez utiliser SoapUI pour faire une demande d'exemple, et y attacher le fichier .pfx (voir Préférences | SSL, et vous pouvez y attacher un fichier .pfx). Examinez cette requête à travers Fiddler, et vous verrez à quoi devrait ressembler un bon. –

0

Le mot de passe est-il correct? Je ne suis pas familier avec la façon. Net de le faire, mais je suppose que "Bob" est le mot de passe. Changez pour "rick" et voyez si vous obtenez une erreur. Si oui, alors vous le faites probablement bien. Si tout est le même que si vous utilisez "bob", il peut y avoir un problème avec le mot de passe.

2

Le problème semblait être que certains systèmes n'avaient pas d'autorité de certification intermédiaire dont ce certificat dépendait. C'est aussi étrange parce que le fichier pfx de ce certificat portait les deux certificats.

+0

En particulier, j'ai découvert que si le certificat client n'est pas signé par une autorité figurant dans la liste des autorités de certification du serveur, le serveur agit comme si le certificat client n'était pas envoyé. On peut supposer que c'est parce qu'il n'a aucun moyen de savoir si le certificat fournit un type d'authentification utile. (Mais c'est très ennuyeux si vous avez une logique d'application pour vérifier la validité de certains certificats.) –