gpt4 book ai didi

c# - Mono vs .NET - 服务器证书验证的区别?

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:27 25 4
gpt4 key购买 nike

我有以下代码:

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;
}
}

我在 Windows 8 和 Mac OSX 上运行它。

苹果电脑

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

window (.net 4.5):

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

知道为什么我会得到不同的结果吗?我也希望在 Mac OS X 案例中使用 RemoteCertificateNameMismatch,因为我认为它是正确的。

最佳答案

Mono 有自己的 TLS 堆栈实现。 .NET 使用 native Windows 堆栈 (SChannel)。这两个堆栈在行为和功能上有很大不同(比如没有 TLS 1.2 和 Mono)。除此之外,Mono 中的错误可能来自不同的根 CA,即 Mono 找不到通往受信任的根 CA 的路径,甚至在检查名称之前就提前提示,而 .NET 找到受信任的路径并稍后在验证主题时提示针对 URL 的证书。

关于c# - Mono vs .NET - 服务器证书验证的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37377936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com