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中,两个变量看起来是一样的——我应该怎么做才能使第一个代码正常工作?我只是不明白为什么它会这么做。
正如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方法遇到了一些文化问题。。。。。
很抱歉我英语不好,希望这能帮助到别人。