簡體   English   中英

X509Store證書。查找FindByThumbprint

[英]X509Store Certificates.Find FindByThumbprint

使用store.Certificates.Find時出現問題。 我正在將Windows Server 2008 R2與NET 3.5配合使用。 該證書由安裝

public static void AddCertificate(X509Certificate2 cert, StoreName name = StoreName.My, StoreLocation location = StoreLocation.LocalMachine)
    {
        var store = new X509Store(name, location);
        store.Open(OpenFlags.ReadWrite);
        store.Add(cert);
        store.Close();
    }

在那之后,找到證書

string certThumbprint = "XXXX";
var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, commandLineArgs.CertificateThumbprint, true);

if (certificates.Count == 0)
  {
    throw new ArgumentException("No certificate found with given thumbprint.");
  }

根本不應該拋出異常,但有時似乎會拋出異常。 每100次運行大約拋出5次異常。

我已經在Google上搜索並找到了“看不見的第一個字符”問題,但是就我而言,指紋確實是硬編碼的。 我沒有從任何地方閱讀指紋。 在帶有NET.4.5的Windows Server 2012上運行的確切代碼從未給我任何問題。 這僅適用於帶有NET.3.5的Windows服務器。 我想知道為什么僅在WS2008R2上結果如此不一致?

我認為問題可能在於您的用戶對證書沒有權限

嘗試這個

  1. 下載並安裝:Windows HTTP Services證書配置工具(WinHttpCertCfg.exe) http://www.microsoft.com/zh-cn/download/details.aspx?id=19801
  2. 並運行:WinHttpCertCfg.exe -g -c LOCAL_MACHINE \\ Store -s“ IssuedToName” -a“ AccountName”

請驗證證書確實在插入它的LocalMachine \\ My存儲中。 我假設您會在商店中找到該證書,但是當您雙擊該證書時,您會看到該證書不受信任。 我的假設是證書鏈沒有建立到受信任的根CA。

現在,修改您的代碼以搜索證書(我將最后一個參數更改為false

var certificates = store.Certificates.Find(X509FindType.FindByThumbprint, commandLineArgs.CertificateThumbprint, false);

或(更好的IMHO)是通過將CA證書導入到適當的存儲區(根,中間機構)來使導入的證書受信任。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM