在Unity中验证SSL\TLS证书

Yur*_*ets 7 ssl unity-game-engine

我在统一证书验证方面存在问题.我使用.Net类HttpWebResponse来发出请求并向ServicePointManager.ServerCertificateValidationCallback提供回调函数.

证书由权限签名,在Web浏览器中正常工作.

验证失败,状态为:X509ChainStatusFlags.PartialChain X509ChainStatusFlags.RevocationStatusUnknown X509ChainStatusFlags.OfflineRevocation

问题,我怎么看,是空根证书存储和空CRL列表.我打开了Mono源代码,发现这些数据应该是从X509Store获得的,但不知何故它不包含任何Root证书或CRL.

我需要实现证书的正确验证,而不是通过在ServerCertificateValidationCallback中返回true或者对证书指纹进行硬编码来跳过它,为此我需要提供所有必需的数据.

假设我知道Root权限,我可以在应用程序启动时将其添加到存储.但它不适用于CRL.该平台是Android\IOS.

问题是:如何强制统一安装根和CRL?

sak*_*kiM 0

您可以通过X509Store安装证书。安装是持久的,因此只需要调用一次。根据X509Certificate2从 Base64 或 DER 字节创建证书。可以通过 openssl: 导出openssl x509 -inform DER -in YOUR_ROOT_CER.cer -out YOUR_BASE64_PEM.pem

private static void InstallCertificate(byte[] cert)
{
    X509Certificate2 certificate = new X509Certificate2(cert);
    X509Store store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
    store.Open(OpenFlags.ReadWrite);
    store.Add(certificate);
    store.Close();
}
Run Code Online (Sandbox Code Playgroud)

在Android 上时请StoreLocation.CurrentUser注意。/data/data/<your.package.name>/.mono/StoreLocation.LocalMachine/usr/xxx/.mono