2016-05-22 14 views
1

Ich habe den folgenden Code:Mono vs. NET - Unterschied in der Serverzertifikatsprüfung?

class MainClass 
{ 
    public static void Main (string[] args) 
    { 
     ServicePointManager.ServerCertificateValidationCallback += ServerCertificateValidationCallback; 

     HttpWebRequest.CreateHttp("https://www.badssl.com/").GetResponse(); 
     HttpWebRequest.CreateHttp("https://wrong.host.badssl.com/").GetResponse(); 

     Console.ReadLine(); 

    } 

    private static bool ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     Console.WriteLine(((HttpWebRequest) sender).RequestUri + " " + sslPolicyErrors); 

     return true; 
    } 
} 

Ich laufe es auf Windows 8 und Mac OSX.

Mac OS X

https://www.badssl.com/ None 
https://www.badssl.com/ None 
https://wrong.host.badssl.com/ RemoteCertificateChainErrors 

Fenster (.net 4.5):

https://www.badssl.com/ None 
https://www.badssl.com/ None 
https://wrong.host.badssl.com/ RemoteCertificateNameMismatch 

Jede Idee, warum ich unterschiedliche Ergebnisse erhalten? Ich würde gerne RemoteCertificateNameMismatch auf dem Mac OS X Fall haben, da ich denke, dass es korrekt ist.

+0

Haben Sie versucht, es auf Mono unter Windows laufen zu lassen? Könnte ein Schuss wert sein –

+0

Ich würde durch die Mono-Quelle scrollen, wie es scheint, dass sie native OS-X-Funktionen verwenden, um das Cert-Problem abzuleiten ... 'EvaluateSystem'' CheckUsage' etc ... 'https://github.com /mono/mono/blob/5a701f39c7d914c5a04da2d33f806b0709b67a5a/mcs/class/System/Mono.Net.Security/SystemCertificateValidator.cs – SushiHangover

+0

Getestet auf Mono unter Windows und da bekomme ich RemoteCertificateNameMismatch. –

Antwort

1

Mono verfügt über eine eigene Implementierung eines TLS-Stacks. .NET verwendet den systemeigenen Windows-Stapel (SChannel). Beide Stacks unterscheiden sich stark in Verhalten und Fähigkeiten (wie kein TLS 1.2 mit Mono). Abgesehen davon kann der Fehler in Mono von einer anderen Stamm-CA stammen, dh Mono findet keinen Pfad zu einer vertrauenswürdigen Stammzertifizierungsstelle und beschwert sich früh, bevor er den Namen überprüft, während .NET den vertrauenswürdigen Pfad findet und sich später bei der Überprüfung des Themas beschwert Zertifikat gegen die URL.

+0

Ich habe versucht, das Problem mit Problemen der Stammzertifizierungsstelle zu isolieren, indem ich zuerst https://www.badssl.com/ validierte und dass das gut funktioniert hat. –

+0

FYI: Mono hat 1.2 Unterstützung, wenn Sie den neuen TLS-Anbieter verwenden ... http://mono.1490590.n4.nabble.com/Mono-s-new-TLS-provider-td4666825.html – SushiHangover

+0

@SushiHangover: Sicher Sie können einen Stapel verwenden, der noch nicht offiziell veröffentlicht wurde (dh nicht in einer Mono-Version enthalten ist) und der den expliziten Haftungsausschluss enthält: [KEINE SICHERHEIT GEPRÜFT UND KEINE GARANTIE FÜR SICHERHEIT ODER STABILITÄT] (https://github.com/ Mono/Mono-Tls). –