c# - X509 商店无法通过序列号找到证书

标签 c# x509certificate x509certificate2

我需要通过序列号获得 X509 证书,我有序列号,我正在遍历它们,我在我需要的集合中看到了序列号,但从未找到。

这是我的调试代码,只是为了确保我看到正确的序列号:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly);

            foreach (X509Certificate2 cert in store.Certificates)
            {
                System.Web.HttpContext.Current.Response.Write (cert.SerialNumber + "=" + oauthCertificateFindValue + "<br/>");
                if (cert.SerialNumber == oauthCertificateFindValue)
                {
                    System.Web.HttpContext.Current.Response.Write("<br/>FOUND FOUND FOUND<br/>");
                }
            }

这是这段代码的输出:

0091ED5F0CAED6AD52‎‎=0091ED5F0CAED6AD52
3D3233116A894CB244DB359DF99E7862=0091ED5F0CAED6AD52

很明显,我循环的第一个匹配序列号,但 if 总是失败,我真正需要根据这个序列号工作的也失败了:

   X509Certificate2Collection certificateCollection = store.Certificates.Find(x509FindType, oauthCertificateFindValue, false);

   if (certificateCollection.Count == 0)
                {
                    throw new ApplicationException(string.Format("An OAuth certificate matching the X509FindType '{0}' and Value '{1}' cannot be found in the local certificate store.", oauthCertificateFindType, oauthCertificateFindValue));
                }

     return certificateCollection[0];

我在这里做错了什么?

最佳答案

您要查找的证书的证书序列号中似乎有两个不可见字符,这就是它们不匹配的原因。如果您将 foreach 循环的输出更改为:

,您应该能够确认这一点
System.Web.HttpContext.Current.Response.Write (string.Format("{0} (Length: {1}) = {2} (Length: {3})<br/>", cert.SerialNumber, cert.SerialNumber.Length oauthCertificateFindValue, oauthCertificateFindValue.Length);

您很可能会看到这些值看起来相同,但它们的长度不同(表明存在这些不可见字符)。

您需要更新搜索值以匹配证书的序列号,包括不可见字符。

关于c# - X509 商店无法通过序列号找到证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18356362/

相关文章:

.NET 从 AWS S3 读取加密文件 - 一些文件在产品上失败,在开发上成功

c# - 区分根 CA 和中间 CA 证书

c# - String.Format 没有为数字格式提供正确的结果

c# - 从另一个线程创建用户控件

c# - 如何针对 Vista 测试应用程序

c# - 如何在 C# 中使用 Ed25519 创建自签名证书

c# - CS1061 : Compilation Error Message

java - 以编程方式在 Java 中生成自签名证书 (X509)、私钥和公钥的问题

security - 如果两个文件的公钥相同,是否足以断定它们是由同一个证书签名的?

ssl - AddSigningCertificate 出现 OpenIddict 错误