Quando navighiamo in siti protetti con HTTPS, a volte capita di vedere il classico prompt di explorer
Quando però dobbiamo accedere ad un sito tramite le classi di .NET, ad esempio la HttpWebRequest, oppure la WebClient, la policy di default accetta solo i certificati validi, e al massimo quelli validi ma scaduti.
Se volessimo invece richiedere all'utente l'autorizzazione a procedere, dobbiamo andare a cambiare la policy di default.
Questo si fa creando una classe che implementa l'interfaccia ICertificatePolicy che ha l'unica funzione CheckValidationResult che deve ritornare True o False a seconda se si vuole procedere oppure no.
Un'istanza di questa classe bisogna assegnarla alla proprietà CertificatePolicy della classe ServicePointManager.
Alla funzione CheckValidationResult vengono passate la ServicePoint che gestisce la connessione, il certificato X509 incriminato, la WebRequest che ha generato il problema ed il codice del problema.
Se dal codice del problema si vuole ricavare la descrizione del problema si può sfruttare il codice presente qui.
A questo punto l'utente ha tutte le informazioni per poter decidere se continuare o rifiutare la richiesta, e in quel caso verrà generata un'eccezione nel metodo che aveva acceduto alla risorsa protetta.
Ricordiamoci prima di cambiare la ServicePointManager.CertificatePolicy, di salvarla, in modo poi di poterla ripristinare.