157 messaggi dal 08 marzo 2012
Ciao a tutti,

da un controller Asp.NET MVC devo chiamare un servizio.
In locale mi funziona tutto correttamente mentre quando chiamo lo stesso servizio da Azure (deployato come App Service) ottengo l'errore: "System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel."

Cercando sulla rete ho anche impostato tutti questi parametri:

ServicePointManager.Expect100Continue = true;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;

Il problema però non si risolve.
Avete qualche idea?

grazie!
10.960 messaggi dal 09 febbraio 2002
Contributi
Ciao,
bisogna determinare quale sia il problema... per il momento prova ad impostare il protocol type esattamente su Tsl12.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;


Se non funziona, leggi questa discussione:
http://forum.aspitalia.com/forum/post/417586/Web-Service-Errore-Richiesta-Annullata-Impossibile-Creare-Canale-Sicuro.aspx?PageIndex=1

Ci trovi il link ad un tool che ti permette di diagnosticare eventuali problemi con il server SSL.

ciao,
Moreno

Enjoy learning and just keep making
157 messaggi dal 08 marzo 2012
BrightSoul ha scritto:
prova ad impostare il protocol type esattamente su Tsl12.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;


Ho provato ma ottengo esattamente lo stesso errore.
Il problema si verifica solo su Azure perché se lo stesso codice lo eseguo in locale, chiamando il servizio remoto, tutto funziona.
Su Azure uso App Service.
10.960 messaggi dal 09 febbraio 2002
Contributi
Hai provato ad usare questo tool per vedere se ti dà indizi?
https://www.ssllabs.com/ssltest/index.html

Per scrupolo, controlla anche che il certificato SSL del server sia emesso da una certification authority riconosciuta da Azure App Service. Qui trovi i comandi per stampare l'elenco.
https://blogs.msdn.microsoft.com/benjaminperkins/2018/01/24/what-root-certificates-exist-on-an-azure-app-service-ca-root/
Comunque, credo che il problema non sia quest'ultimo, altrimenti sarebbe già stato bypassato dalla callback che hai impostato su ServerCertificateValidationCallback.

In mancanza di altri indizi, controlla bene tutto.

Enjoy learning and just keep making
157 messaggi dal 08 marzo 2012
Ciao,

ho provato ad usare ssllabs (qui gli screeshots https://drive.google.com/file/d/13KZTBLNkKzRdsUuMNpPyxyIju5XaqUXe/view?usp=sharing)

In pratica ci sono due ambienti, su quello di test funziona mentre su quello di collaudo non va.
In entrambi i casi chiamo dalla stessa web app Azure...non capisco esattamente quale sia la differenza.

Idee?

grazie!
10.960 messaggi dal 09 febbraio 2002
Contributi
Ok, sembra che da una parte sia supportato SSL3 mentre dall'altra no. Prova a configurare così il tuo HttpClient, vediamo se funziona.

var handler = new HttpClientHandler
{
  SslProtocols = SslProtocols.Tls12
};
using (var httpClient = new HttpClient(handler))
{
  //qui invia la richiesta
}


ciao,
Moreno

Enjoy learning and just keep making
157 messaggi dal 08 marzo 2012
BrightSoul ha scritto:

var handler = new HttpClientHandler
{
  SslProtocols = SslProtocols.Tls12
};
using (var httpClient = new HttpClient(handler))
{
  //qui invia la richiesta
}


Il fatto è che io sto usando questo perchè devo passare il certificato

 public class SecureWebClient : WebClient
    {
        X509Certificate2 certificate;
        public SecureWebClient(X509Certificate2 certificates)
        {
            this.certificate = certificates;
        }

        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
            request.ClientCertificates.Add(certificate);

            return request;
        }
    }


poi nel codice uso "SecureWebClient" in questo modo

using (SecureWebClient client = new SecureWebClient(pfx))
                {
                    client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)");
                    string response = client.DownloadString(url);
                }


Come posso adeguare il mio codice per aggiungere quello che mi suggerisci?

Grazie!
157 messaggi dal 08 marzo 2012
Ho provato così (credo sia simile a quello da te proposto), ma non funziona

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                ServicePointManager.Expect100Continue = true;

                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback
                (
                   delegate { return true; }
                );

string pfxPath = (Server.MapPath("~/SecureCertificates/") + CERTIFICATE_NAME);

                X509Certificate2 pfx = new X509Certificate2(pfxPath, CERTIFICATE_PASSWORD);
                
                using (SecureWebClient client = new SecureWebClient(pfx))
                {
                    client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)");
                    string pasResponse = client.DownloadString(url);
                }


dove SecureWebClient è

public class SecureWebClient : WebClient
    {
        X509Certificate2 certificate;
        public SecureWebClient(X509Certificate2 certificates)
        {
            this.certificate = certificates;
        }

        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);            
            request.ClientCertificates.Add(certificate);
            
            return request;
        }
    }

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.