Anmodningen blev afbrudt: Kunne ikke oprette en sikker SSL/TLS-kanal

Vi kan ikke oprette forbindelse til en HTTPS-server ved hjælp af WebRequest på grund af denne fejlmeddelelse:

Anmodningen blev afbrudt: Kunne ikke oprette en sikker SSL/TLS-kanal.

Vi ved, at serveren ikke har et gyldigt HTTPS-certifikat med den anvendte sti, men for at omgå dette problem bruger vi følgende kode, som vi har taget fra et andet StackOverflow-indlæg:

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

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

Problemet er, at serveren aldrig validerer certifikatet og fejler med ovenstående fejl. Er der nogen der har en idé om hvad jeg skal gøre?


Jeg bør nævne at en kollega og jeg udførte tests for et par uger siden og det virkede fint med noget der ligner det jeg skrev ovenfor. Den eneste "store forskel" vi'har fundet er, at jeg'bruger Windows 7 og han brugte Windows XP. Ændrer det noget?

Det problem, du har, er, at aspNet-brugeren ikke har adgang til certifikatet. Du er nødt til at give adgang ved hjælp af winhttpcertcfg.exe

Et eksempel på hvordan du sætter dette op er på: http://support.microsoft.com/kb/901183

Under trin 2 i flere oplysninger

EDIT: I nyere versioner af IIS er denne funktion indbygget i certifikathåndteringsværktøjet - og kan tilgås ved at højreklikke på certifikatet og bruge indstillingen til håndtering af private nøgler. Flere oplysninger her: https://serverfault.com/questions/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791

Kommentarer (4)

Fejlen er generisk, og der er mange grunde til, at SSL/TLS-forhandlingen kan mislykkes. Den mest almindelige er et ugyldigt eller udløbet servercertifikat, og det har du selv sørget for ved at levere din egen servercertifikatvalideringskrog, men det er ikke nødvendigvis den eneste årsag. Serveren kan kræve gensidig autentifikation, den kan være konfigureret med en række ciphers, der ikke understøttes af din klient, den kan have en tidsforskydning, der er for stor til, at håndslaget kan lykkes, og mange andre grunde.

Den bedste løsning er at bruge SChannel-fejlfindingsværktøjssættet. SChannel er den SSPI-udbyder, der er ansvarlig for SSL og TLS, og din klient vil bruge den til håndtrykningen. Tag et kig på TLS/SSL-værktøjer og indstillinger.

Se også Sådan aktiveres Schannel-hændelseslogning.

Kommentarer (2)

Du kan prøve at installere et democertifikat (nogle ssl-udbydere tilbyder dem gratis i en måned) for at være sikker på, om problemet er relateret til certifikatets gyldighed eller ej.

Kommentarer (3)