programing

X509 저장소에서 모든 인증서를 검색하는 방법

jooyons 2023. 8. 13. 09:42
반응형

X509 저장소에서 모든 인증서를 검색하는 방법

다음 코드를 사용하여 asp.net 웹 앱에서 PC의 모든 인증서를 검색하고 있습니다.인증서 컬렉션이 비어 있는데, 그 이유를 이해할 수 없습니다.

저는 제 사용자 계정을 사칭하려고 시도했지만 역시 성공하지 못했습니다.내가 뭘 잘못하고 있는 거지?

var store = new X509Store(StoreLocation.CurrentUser); //StoreLocation.LocalMachine fails too
var certificates = store.Certificates;
foreach (var certificate in certificates)
{
    var friendlyName = certificate.FriendlyName;
    Console.WriteLine(friendlyName);
}

//original problem: fetch a single certificate by its subject name
X509Certificate2 clientCertificate = CertificateUtility.GetCertificate(StoreName.My, StoreLocation.CurrentUser,  "CN=mypc.domainname"); //returns null :(

이 코드 줄을 두 번째 줄에 추가하고 작동 방식을 확인합니다.

store.Open(OpenFlags.ReadOnly);

그 다음 아래쪽::

store.Close();

올인원...

저는 https가 있는 아파치 서버(샘플)를 가지고 있습니다.나는 https와 c#(vs2010)을 통해 PHP 업로드 페이지에 접속합니다.

  1. 예를 들어 개인 폴더 인증서에 인증서를 설치합니다.

  2. 인증서를 보려면 적어도 win7에서 "certmgr.msc"를 실행합니다.

개인 인증서 나열

var store = new X509Store(StoreLocation.CurrentUser); 

store.Open(OpenFlags.ReadOnly); 

var certificates = store.Certificates;
foreach (var certificate in certificates)
{
    var friendlyName = certificate.FriendlyName;
    var xname = certificate.GetName(); //obsolete
    Console.WriteLine(friendlyName);
}

store.Close();

특정 인증서 찾기

string certificateName = "CN=localhost"; //name found in the var xname
X509Store storex = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                    storex.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certificatesx =
            storex.Certificates.Find(X509FindType.FindBySubjectName, 
            certificateName,
            true);

X509Certificate certificatex = certificates[0];

storex.Close();

...을 통해 인증서를 찾을 수 있습니다.

var certificateStore = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);

certificateStore.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

var certificateCollection = certificateStore.Certificates.Find(X509FindType.FindBySubjectName, "mycert.me.com",false);

certificateStore.Close();

var certificate = certificateCollection[0];

certificateCollection에는 내가 관심 있는 인증서가 있을 것입니다... 하나만 있으면 컬렉션의 첫 번째 요소를 얻을 수 있습니다.

인증서 저장소(추가/추가/인증서 스냅인/내 사용자 계정/인증서 - 현재 사용자/개인/인증서)에서 "CN=mypc.domainname"이 실제로 인증서에 무엇인지 확인합니다.

"CN=mypc.domainname"

"CN = mypc.domainname"

...기타

언급URL : https://stackoverflow.com/questions/4729302/how-to-retrieve-all-certificates-in-your-x509store

반응형