我在 Unity 中遇到了证书验证的问题。我使用 .Net 类 HttpWebResponse 发送请求并提供回调函数给 ServicePointManager.ServerCertificateValidationCallback。
该证书由权威机构签名,在 Web 浏览器中运行良好。
验证失败,状态为:X509ChainStatusFlags.PartialChain X509ChainStatusFlags.RevocationStatusUnknown X509ChainStatusFlags.OfflineRevocation
我认为问题在于空的根证书存储和空的 CRLs 列表。我查看了 Mono 源代码并发现这些数据应该从 X509Store 中获取,但某种原因它不包含任何根证书或 CRLs。
我需要正确实现证书验证,而不仅仅是通过在 ServerCertificateValidationCallback 中返回 true 或硬编码证书指纹来跳过验证。要做到这一点,我需要提供所有必需的数据。
假设我知道根证书的权威机构,我可以在应用程序启动时将其添加到存储中。但这与 CRLs 不起作用。平台是 Android\IOS。
问题是:如何强制 Unity 安装根证书和 CRLs?
Environment.SetEnvironmentVariable("HOME", <在您的情况下正确的路径>)
来更改Mono的默认路径,例如抽象外部路径/sdcard/..
或您的包data/data/
路径。 - sakiM