[WebService] Utilisation d'un certificat dans un WebService
Verrisan
Messages postés59Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention23 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:
Verrisan
Messages postés59Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention23 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???
Verrisan
Messages postés59Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention23 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!
Verrisan
Messages postés59Date d'inscriptionmardi 21 novembre 2000StatutMembreDernière intervention23 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?
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.