C#证书搜索-为什么串行从Win-view工具不';不起作用

本文关键字:工具 不起作用 Win-view 搜索 证书 为什么 | 更新日期: 2023-09-27 18:21:54

我试着用以下代码通过串行搜索本地商店中的插入物:

X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
var certSerial = "‎18 99 ac c2 1e ed 69 ae"; //copied from Windows Certificates view tool
certSerial = certSerial.Replace(" ", string.Empty).ToUpper();
var foundCerts = store.Certificates.Find(
         X509FindType.FindBySerialNumber,
         certSerial ,
         true);

什么也没找到。然而,后来我在调试模式下查看了该存储,并复制了我想找到的证书序列-1899ACC21EED69AE,并将certSerial变量更改为:

var certSerial = "1899ACC21EED69AE";

它还给我正确的证书。在Debug中,两个变量看起来是一样的——我应该怎么做才能使第一个代码正常工作?我只是不明白为什么它会这么做。

C#证书搜索-为什么串行从Win-view工具不';不起作用

正如FindBySerialNumber中所解释的,序列号必须以相反的顺序排列,因为它是一个整数。

在中重新键入字符串

var certSerial = "‎18 99 ac c2 1e ed 69 ae";

当我把它粘贴到我的编辑器中时,我收到了:

var certSerial = "?18 99 ac c2 1e ed 69 ae";

我今天遇到了同样的问题,并找到了不同的解决方案:

        var store = new X509Store(StoreLocation.CurrentUser);
        store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
        var certificates = store.Certificates;
        X509Certificate2 match = null;
        foreach(var item in certificates)
        {
            if (item.SerialNumber != null && item.SerialNumber.Equals(serial, StringComparison.InvariantCultureIgnoreCase))
            {
                match = item;
                break;
            }
        }

如果您只需要有效的证书,您可以使用Verify方法,例如:

match.Verify()

看起来Find方法遇到了一些文化问题。。。。。

很抱歉我英语不好,希望这能帮助到别人。