보안 응용 프로그램의 경우 대화 상자에서 인증서를 선택해야합니다. C#을 사용하여 인증서 저장소 또는 그 일부 (예 : storeLocation="Local Machine"
및 storeName="My"
)에 액세스하고 거기에서 모든 인증서 모음을 가져 오려면 어떻게해야합니까? 귀하의 도움에 미리 감사드립니다.C#의 인증서 저장소에서 인증서 목록 가져 오기
답변
예 - X509Store.Certificates
속성은 X.509 인증서 저장소의 스냅 숏을 반환합니다.
X509Store store = new X509Store("My");
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 mCert in store.Certificates){
//TODO's
}
이 시도 :
//using System.Security.Cryptography.X509Certificates;
public static X509Certificate2 selectCert(StoreName store, StoreLocation location, string windowTitle, string windowMsg)
{
X509Certificate2 certSelected = null;
X509Store x509Store = new X509Store(store, location);
x509Store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection col = x509Store.Certificates;
X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(col, windowTitle, windowMsg, X509SelectionFlag.SingleSelection);
if (sel.Count > 0)
{
X509Certificate2Enumerator en = sel.GetEnumerator();
en.MoveNext();
certSelected = en.Current;
}
x509Store.Close();
return certSelected;
}
Linq는 다음과 같이 쉽게 만듭니다. x509Store.Certificates.OfType
@JonathanDeMarks : "DC = mysite, DC = com"은 정확히 여기서 무엇을 의미합니까? 이 예제들 중 _specific_ 인증서를 얻는 방법을 보여주는 것 같지는 않습니다 ... – Nyerguds
@Nyerguds 질문 : 인증서 저장소에서 C#의 인증서 목록을 얻으십시오. 다른 질문을 만드십시오. – Cobaia
그렇게하는 가장 간단한 방법은 당신이 원하는 인증서 저장소를 열고 다음 X509Certificate2UI
을 사용하는 것입니다. X509Certificate2UI
on MSDN에서
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var selectedCertificate = X509Certificate2UI.SelectFromCollection(
store.Certificates,
"Title",
"MSG",
X509SelectionFlag.SingleSelection);
더 많은 정보를 제공합니다.
'X509Certificate2UI'를 사용하려면'System.security.dll'에 대한 참조를 추가해야합니다. 그러나 이것은 매력 +1':)'처럼 작동합니다. 또한 사용자 키 스토어를 사용하기 위해서'StoreLocation.CurrentUser' 대신'StoreLocation.LocalMachine'을 사용합니다. – albciff
오타가 발생할 가능성을 제거하려면 StoreName과 StoreLocation이라는 열거 형을 사용해야합니다. –