J'utilise ce code de C# pour appeler un service web php qui est garanti par l'utilisateur/mot de passe et certificat:Appeler un webservice php de .net avec un cert
string wsurl = ConfigurationManager.AppSettings["Url"];
string wsuser = ConfigurationManager.AppSettings["User"];
string wspass = ConfigurationManager.AppSettings["Pass"];
string url = string.Format(wsurl, param1, param2);
System.Net.CredentialCache oCredentialCache = new System.Net.CredentialCache();
oCredentialCache.Add(new System.Uri(url), "Basic",
new System.Net.NetworkCredential(wsuser, wspass));
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Timeout = TIMEOUT;
req.Credentials = oCredentialCache;
req.Method = "GET";
AttachCert(req);
//Get the data as an HttpWebResponse object
WebResponse resp = req.GetResponse();
Cela fonctionne comme prévu lors de son exécution de ma machine de développement mais quand nous téléchargeons ceci au serveur j'obtiens une erreur de délai d'attente sur l'appel à GetResponse(). L'appel AttachCert() est où j'attache le certificat à la demande, et si je commente cette ligne je n'obtiens pas le délai d'attente mais une erreur correcte indiquant que l'appel n'a pas pu être accompli en raison du certificat manquant. Ce est le code AttachCert:
public static void AttachCert(HttpWebRequest Request)
{
// Obtain the certificate.
string certpath = ConfigurationManager.AppSettings["CertPath"];
X509Certificate Cert = X509Certificate.CreateFromCertFile(certpath);
ServicePointManager.CertificatePolicy = new CertPolicy();
Request.ClientCertificates.Add(Cert);
}
Toute idée pourquoi cela fonctionnerait sur ma machine, mais pas sur le serveur? Nous avons essayé de supprimer le certificat sur le webservice et cela a fonctionné comme prévu. Donc, il y a clairement quelque chose d'étrange sur cet appel mais je n'arrive pas à comprendre quoi.
Merci Vicenç
Pouvez-vous tracer dans AttachCert et voir quel appel à l'intérieur provoque le timeout? – TML
J'ai vu des problèmes avec les firewalls entre dev et production. Pouvez-vous RDP sur le serveur de production et confirmer que vous pouvez naviguer vers le service Web PHP avec IE? –
Pourquoi utilisez-vous à la fois l'authentification de base et la fourniture d'un certificat? –