来自文件的链证书

本文关键字:证书 文件 | 更新日期: 2023-09-27 17:55:12

我在证书验证方面遇到问题。我有.perm文件女巫是链证书文件(里面有多个开始和结束证书)。

我尝试导入证书集合,但导入集合后的长度为 1。

X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import(certpath);

我看不到任何有趣的选项

X509Chain chain2 = new X509Chain();

我得到错误的验证返回,我相信原因是并非所有证书都已加载。

以下是我的完整验证方法

    private static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        try
        {
            string certpath = "actual path";
            X509Certificate2Collection collection = new X509Certificate2Collection();
            collection.Import(certpath);
            X509Chain chain2 = new X509Chain();
            foreach(X509Certificate2 c in collection)
            {
                chain2.ChainPolicy.ExtraStore.Add(c);
            }
            // Check all properties
            chain2.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
            // This setup does not have revocation information
            chain2.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
            // Build the chain
            chain2.Build(new X509Certificate2(certificate));
            // Are there any failures from building the chain?
            if (chain2.ChainStatus.Length == 0)
                return true;
            // If there is a status, verify the status is NoError
            bool result = chain2.ChainStatus[0].Status == X509ChainStatusFlags.NoError;
            return result;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
        return false;
    }

来自文件的链证书

X509Certificate2CollectionImport 方法不支持包含多个证书(一个接一个地追加)的文件。请参阅此处有关此方法的文档。

有一种格式可能有效 - SerializedStore但文档没有说明太多。我假设它是SerializedCert的某个国王,这是一个具有其属性的证书,因此即使这种格式也与您拥有的格式不匹配。

尝试分离证书并使用此构造函数初始化X509Certificate2Collection