Vous avez deux options. La première option consiste à utiliser la classe ServicePointManager. Vous avez raison en ce sens qu'il gère tous les points de service, mais vous pouvez utiliser le paramètre « expéditeur » dans la méthode de rappel à la différence entre les différents points de service:
void SomeMethod()
{
ServicePointManager.ServerCertificateValidationCallback +=
ValidateServerCertificate;
var url = "https://mail.google.com/mail/?shva=1#inbox";
var request = (HttpWebRequest)WebRequest.Create(url);
request.GetResponse();
}
private static bool ValidateServerCertificate(object sender,
X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslpolicyerrors)
{
if(sender is HttpWebRequest)
{
var request = (HttpWebRequest) sender;
if(request.RequestUri.ToString() == "https://mail.google.com/mail/?shva=1#inbox")
{
return (certificate.GetPublicKeyString() == "The public key string you expect");
}
}
return true;
}
Cette option fonctionne pour créé manuellement HttpWebRequest et WCF -created demandes, comme le "expéditeur" sera HttpWebRequest pour les deux. Je ne suis pas sûr si le "expéditeur" sera autre chose qu'un HttpWebRequest.
La deuxième option est d'obtenir le certificat du point de service directement:
void SomeMethod()
{
ServicePointManager.ServerCertificateValidationCallback +=
ValidateServerCertificate;
var url = "https://mail.google.com/mail/?shva=1#inbox";
var request = (HttpWebRequest)WebRequest.Create(url);
request.GetResponse();
var serverCert = request.ServicePoint.Certificate;
// Validate the certificate.
}
Je ne pouvais pas savoir s'il est possible d'obtenir le ServicePoint utilisé par un proxy WCF. Si ce n'est pas possible, cette option ne fonctionnera pas pour WCF. Autre que cela, la plus grande différence est que la première option empêche la connexion si la validation du certificat échoue, tandis que la deuxième méthode ne validera qu'après que la connexion a été faite.
Si vous avez juste besoin de déterminer si une demande va passer par un proxy:
var httpRequest = (HttpWebRequest)WebRequest.Create("someurl");
var isUsingProxy = DoesRequstUseProxy(request);
bool DoesRequestUseProxy(HttpWebRequest request)
{
if(request.Proxy == null)
{
return false;
}
return request.Proxy.GetProxy(request.RequestUri) != request.RequestUri;
}
Comment votre application faire la connexion sécurisée? WCF? HttpWebRequest? –
Je suis à la recherche d'une solution générale qui répondra à toutes les méthodes de communication .NET. Oui, j'utilise WCF et HTTPWebRequest – LamonteCristo