La richiesta è stata interrotta: Impossibile creare un canale sicuro SSL/TLS

Non siamo in grado di connetterci a un server HTTPS usando WebRequest a causa di questo messaggio di errore:

La richiesta è stata interrotta: Could not create SSL/TLS secure channel.`

Sappiamo che il server non ha un certificato HTTPS valido con il percorso utilizzato, ma per aggirare questo problema, usiamo il seguente codice che abbiamo preso da un altro post di StackOverflow:

private void Somewhere() {
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}

private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
   return true;
}

Il problema è che il server non convalida mai il certificato e fallisce con l'errore di cui sopra. Qualcuno ha idea di cosa dovrei fare?


Dovrei dire che io e un collega abbiamo fatto dei test qualche settimana fa e funzionava bene con qualcosa di simile a quello che ho scritto sopra. L'unica "grande differenza" che abbiamo trovato è che io sto usando Windows 7 e lui stava usando Windows XP. Questo cambia qualcosa?

Il problema che stai avendo è che l'utente aspNet non ha accesso al certificato. Devi dare l'accesso usando il winhttpcertcfg.exe

Un esempio su come impostarlo è su: http://support.microsoft.com/kb/901183

Sotto il passo 2 in maggiori informazioni

EDIT: Nelle versioni più recenti di IIS, questa funzione è incorporata nello strumento di gestione dei certificati - e vi si può accedere cliccando con il tasto destro sul certificato e utilizzando l'opzione per la gestione delle chiavi private. Maggiori dettagli qui: https://serverfault.com/questions/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791

Commentari (4)

L'errore è generico e ci sono molte ragioni per cui la negoziazione SSL/TLS può fallire. Il più comune è un certificato del server non valido o scaduto, e ti sei occupato di questo fornendo il tuo gancio di validazione del certificato del server, ma non è necessariamente l'unica ragione. Il server potrebbe richiedere l'autenticazione reciproca, potrebbe essere configurato con una suite di cifrari non supportata dal tuo client, potrebbe avere una deriva temporale troppo grande perché la stretta di mano abbia successo e molte altre ragioni.

La soluzione migliore è usare il set di strumenti per la risoluzione dei problemi di SChannel. SChannel è il provider SSPI responsabile per SSL e TLS e il tuo client lo userà per l'handshake. Dai un'occhiata a Strumenti e impostazioni TLS/SSL.

Vedi anche Come abilitare la registrazione degli eventi di Schannel.

Commentari (2)

Puoi provare a installare un certificato demo (alcuni provider ssl li offrono gratuitamente per un mese) per essere sicuro se il problema è legato alla validità del certificato o no.

Commentari (3)