Ciao a tutti.
 
Nell'accedere a un web service via https, il framework .NET può lanciare un'eccezione di tipo System.Net.WebException indicando che "la connessione sottostante è chiusa". Il testo non è altro che la trasposizione dell'errore 403 (forbidden) del protocollo HTTP.
Dando per scontata una corretta configurazione del server web, il problema si verifica quando il certificato che il server passa all'applicativo per stabilire il canale sicuro SSL è firmato da una CA considerata non attendibile (è il tipico caso dei certificati self-signed): le policy di sicurezza di default lato client impediscono l'apertura di un canale con questi presupposti.
 
Nel caso non riusciate a fornire un certificato garantito da un CA attendibile, si può ovviare via codice in tre semplici passi:
 
1) Si implementa l'interfaccia System.Net.ICertificatePolicy ed in particolare il metodo CheckValidationResult in modo che ritorni true se possiamo ritenere comunque attendibile il certificato.
 
public class TrustedCertificatePolicy : System.Net.ICertificatePolicy
    {
        public TrustedCertificatePolicy() {}

        public bool CheckValidationResult (System.Net.ServicePoint sp, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Net.WebRequest request, int )
        {
            return true;
        }
    }
 
2) Prima della chiamata al metodo del web service si imposta la policy mediante la classe statica System.Net.ServicePointManager:
 
System.Net.ServicePointManager.CertificatePolicy = new trustedCertificatePolicy();
 
3) Si chiama il Web Service che ora riuscirà ad accedere via SSL.
 
 
Segnalo inoltre il Tip di Barbieri
 
Ciao
Allino