2016-01-18 44 views
0

我正在通過.NET API處理X509證書,並且想知道是否可以從CertificateAuthority Store中檢索CA證書。我曾嘗試排列和最有意義的(但也失敗)的一個負荷是:是否有可能從CertificateAuthority Store中檢索CA證書

var store = new X509Store(StoreName.CertificateAuthority, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadOnly); 
var count = store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, "CN=SecureTrust CA", false).Count; 
store.Close(); 

返回的0計數。

+0

證書管理器中,存在與證書主題'CN = SecureTrust CA' \ – tchelidze

+0

您可能要重新 - 檢查[StoreName枚舉](https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename(v = vs.110).aspx)。我想*你想看看'Root',而不是'CertificateAuthority'。 –

+0

@Damien_The_Unbeliever我試過Root和AuthRoot。我已經將Admin作爲Admin運行。我出來的想法,並開始認爲這是不可能的某種原因 – onefootswill

回答

1

如評論所示,您需要使用Root而不是CertificateAuthority。另外,如果您使用的是FindBySubjectDistinguishedName,則必須使用完整的DN。

這工作:

var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadOnly); 
var count = store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, 
     "CN=SecureTrust CA, O=SecureTrust Corporation, C=US", false).Count; 
store.Close(); 

或者使用不太嚴格FindBySubjectName

var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadOnly); 
var count = store.Certificates.Find(X509FindType.FindBySubjectName, 
            "SecureTrust CA", false).Count; 
store.Close(); 
+0

好!感謝您的學習:) – onefootswill