Paolo Pialorsi

SOA, Workflow Foundation (WF), Windows Communication Foundation (WCF) e le Architetture Distribuite

News

Archives

SSL CertificatePolicy con .NET 2.0

Oggi ho avuto l'esigenza di ridefinire la CertificatePolicy di un'applicazione .NET che stavo scrivendo. Infatti avevo bisogno di contattare via HTTPS over SSL un server di un cliente che è reso sicuro con un certificato SSL autoprodotto. La problematica è nota da tempo e risolta già da .NET 1.0. Infatti in .NET 1.0 era sufficiente implementare l'interfaccia System.Net.ICertificatePolicy e registrare la propria implementazione al posto di quella predefinita.

L'interfaccia ICertificatePolicy prevede la seguente struttura:

public interface ICertificatePolicy
{
      bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem);
}
 
Con .NET 2.0 però questa interfaccia e la sua registrazione tramite la proprietà CertificatePolicy della classe System.Net.ServicePointManager è data come "deprecated". Come sempre solo usando quotidianamente .NET è possibile, man mano, accorgersi di tutto quello che offre e, nel passaggio dalla versione 1.x alla 2.0, rendersi conto delle modifiche e/o novità che sono rimaste nell'ombra. Infatti a fronte di molte novità "eclatanti" della release 2.0, ci sono poi anche molte modifiche, migliorie, refactoring, ecc. che saltano fuori solo usandolo, all'occorrenza.

Ora per fare tutto ciò con .NET 2.0 è consigliato l'uso di un delegate, eventualmente anonimo, che si registri sulla proprietà ServerCertificateValidationCallback, sempre della classe ServicePointManager:

ServicePointManager.ServerCertificateValidationCallback += delegate (object src, 
System.Security.Cryptography.X509Certificates.X509Certificate certificate,
System.Security.Cryptography.X509Certificates.X509Chain chain,
System.Net.Security.SslPolicyErrors errors)
{
bool result = false;
  // Applico la mia policy custom
// ...

return(result);
};

Dal momento che questa opportunità può essere utile a chi deve implementare client HTTP, ma anche a chi (come me) deve collegarsi a servizi di terze parti via HTTP (+SOAP), la ricordo con l'aggiunta dell'update alla v. 2.0 del Framework.
Posted: Mar 16 2006, 10:50 PM by paolo | with no comments
Filed under: