SSL证书验证:.NET与Mono的区别

6

我在Unity游戏中验证SSL证书时遇到了问题。

我编写了一个简单的测试代码,如下:

ServicePointManager.ServerCertificateValidationCallback += ServerCertificateValidationCallback;


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


public void Test()
{
    WebClient w = new WebClient();
    string downloadString = w.DownloadString("https://encrypted.google.com/");
}

我已经在.NET 4.5和Unity(Mono)中实现了这个功能。问题是,在.NET中,该证书被正确验证,但是在Mono中,出现了以下错误:

SslPolicyErrors: RemoteCertificateChainErrors
ChainStatus:
    PartialChain
    RevocationStatusUnknown
    OfflineRevocation

为什么会发生这种情况?我应该在Mono中设置些什么来处理它吗?
谢谢。
1个回答

1
问题在于Mono没有内置任何根证书或CRL,请参见为什么Mono不包括根证书。如果您尝试开发移动游戏,则可能会遇到证书加载错误,它返回不完整的X509Chain,并在Mono 3.6.0中得到了修复。
根据官方建议,将Unity升级到Unity2017将内置Mono 4.5,从而解决这个烦人的问题。否则,您可能需要手动安装CA证书

我正在使用Unity 2018.1,仍然存在这个问题,但是你至少指出了正确的方向+1。 - Bobby Tables

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接