[WebService] Utilisation d'un certificat dans un WebService

Verrisan
Messages postés
59
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
23 décembre 2013
- 12 avril 2007 à 16:13
 eric - 12 juil. 2015 à 11:42
Bonjour tout le monde,


je dois appeler depuis mon Service Web un autre Service Web avec un certificat. J'ai procédé comme suit:


...
        string certPath = @"C:\cb\certificat\Test.cer";
...


classProxy proxy = new classProxy();


.....


proxy.Url = @"https://....";
proxy.ClientCertificates.Add(X509Certificate.CreateFromCertFile(certPath));
....
prox.chercher(....);
....



Lorsque je fais proxy.chercher une exception est déclanchée et le message d'erreur suivant apparaît:


La connexion sous-jacente a été fermée : Impossible d'établir une relation de confiance pour le canal sécurisé SSL/TLS.


Dans InnerException, j'ai le message suivant:
Le certificat distant n'est pas valide selon la procédure de validation.



Est-ce quelqu'un connaît la "procédure de validiation ou sait où je peux trouver des infos à ce sujet.


Par avance, merci pour votre aide!


Cédric
A voir également:

7 réponses

zebobo5
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
1
12 avril 2007 à 16:25
Salut, essaye d'ajouter ca dans ton code et dis moi si ca marche :

ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors)
{
    return true;
};

ServicePointManager.MaxServicePointIdleTime = 100000;

<hr />
ZeBobo5
N'oubliez pas de cloturer votre post.
0
zebobo5
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
1
12 avril 2007 à 16:26
ou en C# 1.1 :

System.Net.ServicePointManager
.CertificatePolicy = new TrustAllCertificatePolicy();
ServicePointManager.MaxServicePointIdleTime = 100000;

<hr />
ZeBobo5
N'oubliez pas de cloturer votre post.
0
Verrisan
Messages postés
59
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
23 décembre 2013

12 avril 2007 à 22:08
Salut,

j'ai ajouté ton code avant le déclenchement de l'exception dans le catch(...), mais rien ne se passe, c'est-à-dire que je n'ai pas d'erreur! Est-ce normal???

Merci pour ton aide

Cédric
0
zebobo5
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
1
13 avril 2007 à 09:17
Re,
mets le code directement dans ta classe

<hr />
ZeBobo5
N'oubliez pas de cloturer votre post.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Verrisan
Messages postés
59
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
23 décembre 2013

17 avril 2007 à 09:27
Salut Zebobo5,

Comme j'utilise Visual Studio 2005, j'ai pris le code de ton premier exemple et je l'ai ajouté dans la classe comme suit:


public class ZPKTest : System.Web.Services.WebService
{
    public ZPKTest () {


        //Supprimez les marques de commentaire dans la ligne suivante si vous utilisez des composants conçus 
        //InitializeComponent(); 


        ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors)
 {
     return true;
 };


        ServicePointManager.MaxServicePointIdleTime = 100000;


    }


    [WebMethod]
    public string testCert()
    {


...
 try
 {
...
        string certPath = @"C:\cb\certificat\Test.cer";
...


 classProxy proxy = new classProxy();


.....


 proxy.Url = @"https://....";
 proxy.ClientCertificates.Add(X509Certificate.CreateFromCertFile(certPath));
....
 proxy.chercher(....);
....
 }
 catch (Exception e)
 {
....
 }


        return "OK";


    }
}


En faisant, j'ai toujours l'exception qui est déclenché, dès que la méthdoe chercher est appelée (proxy.cerhcher()), mais le message est différent d'avant.

Dans e.message j'ai ceci:

La demande a échoué avec l'état HTTP 401 : Unauthorized.

Dans InnerException, je n'ai rien car = null.

Est-ce que ma façon de faire est juste! Est-ce que tu aurais une idée!

Par avance, merci beaucoup pour ton aide!

Cédric
0
Verrisan
Messages postés
59
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
23 décembre 2013

24 avril 2007 à 10:29
Bonjour tout le monde,

Par rapport au message précédent, j'ai ajouté l'élément NetworkCredential credentials.... comme suit:



public class ZPKTest : System.Web.Services.WebService
{
    public ZPKTest () {


        //Supprimez les marques de commentaire dans la ligne suivante si vous utilisez des composants conçus 
        //InitializeComponent(); 


        ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors)
 {
     return true;
 };


        ServicePointManager.MaxServicePointIdleTime = 100000;


    }


    [WebMethod]
    public string testCert()
    {


...
 try
 {
...
        string certPath = @"C:\cb\certificat\Test.cer";
...


 classProxy proxy = new classProxy();


.....


 proxy.Url = @"https://....";
 proxy.ClientCertificates.Add(X509Certificate.CreateFromCertFile(certPath));
....


NetworkCredential credentials = new NetworkCredential("user1", "mot de passe");
proxy.PreAuthenticate = true;
CredentialCache cache = new CredentialCache();
cache.Add(new Uri("https://..."), "Basic", credentials);
cache.Add(new Uri("https://..."), "Digest", credentials);
cache.Add(new Uri("https://..."), "kerberos", credentials);


params inf = new param(....);
prox.Credentials = cache;


result  res = proxy.chercher(param);
....
 }
 catch (Exception e)
 {
....
 }


        return "OK";


    }
}



Avec ceci, je n'ai plus d'exception qui est déclenchée, mais le contenu de la variable res est null. J'ai vérifier le contenu de la variable param qui contient les différents paramètres, dans XMLSPY qui sont correcte, car ce programme permet aussi d'envoyer des requête SOAP et en l'utilisant, j'arrive avoir des réponse, mais pas depuis le Service Web.

Est-ce quelqu'un connaîtrait la raison pour laquelle cela ne fonctionne depuis mon Service Web?

Par avance, merci beaucoup pour votre aide!

Cédric
0
Bonjour Verrisan,

pour ma part je n'ai pas d'authentification particulière. Toutefois j'obtiens les mêmes symptômes que toi. Je développe avec VS2013. Mon appel au web service externe est géré dans une librairie, et testé depuis un simple exécutable console. Si j'essaie de faire la même chose à l'intérieur de une web method dans un service web faisant référence à la librairie, aucun résultat, mais aucune erreur explicite. Juste pas de réponse. L'enveloppe constituée est pourtant conforme, comme toi. J'en déduis donc que ton problème est potentiellement autre qu'un problème de certification.
0