Chiamare un web service su un canale SSL con certificato non trusted

Lavorando con i webservice vi sarà senz'altro capitato di volere testare uno scenario SSL in un ambiente di sviluppo; in questi casi si usa installare sul web server un certificato SSL di prova autogenerato, non quindi trusted da una authority di certificazione, potenzialmente riportante con un Common Name diverso dall'host name del web server...

Questo tipo di scenario produce il seguente errore con le classi proxy generate da Visual Studio:

System.Net.WebException. The underlying connection was closed. Could not establish trust relationship with remote server.

Questo è giusto che accada in uno scenario di produzione ma può essere necessario bypassare il problema in fase di sviluppo o testing.

Il workaround è quello di creare sul client una classe di validazione dei certificati custom che ritorni sempre un esito positivo, e di associarla alla proprietà CertificatePolicy del ServicePointManager prima di effettuare la chiamata.

Ecco il codice per la classe:

using System.Net;
using System.Security.Cryptography.X509Certificates;

public class MyPolicy : ICertificatePolicy {
    public bool CheckValidationResult(
          ServicePoint srvPoint
        , X509Certificate certificate
        , WebRequest request
        , int certificateProblem) {

        //Ritorna sempre True per forzare l'accettazione dei certificati.
        return true;
    }
}

e quello da scrivere prima di invocare il webmethod:

System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();

Published martedì 25 settembre 2007 16.16 by marcodelgatto
Filed under: , ,

Comments

No Comments

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Powered by Community Server (Commercial Edition), by Telligent Systems