EMDI는 지금도 개발중

C# : 선택한 공인인증서 정보 가져오기(3) 본문

IT/전자세금계산서

C# : 선택한 공인인증서 정보 가져오기(3)

EMDI 2020. 4. 7. 13:50

물론 모든 공인인증서를 무조건 가져오는 것보다 용도에 맞는 공인인증서만 가지고 오는 것이 맞지만 일단 지금은 테스트임으로 구체적인 설계는 넘어가도록 하겠습니다. 그 다음은 공인인증서의 등록기관, 등록일자, 만료일자 등의 구체적 정보를 빼내는 방법에 대해 공부하도록 하겠습니다.

1. 인증서 정보 가져오기

NPKI폴더 경로를 따라 들어가는 방법은 전 글에 다룬 적이 있어서 패스하도록 하겠습니다. 만약 해당 내용을 보고싶은 분들은 아래의 링크를 참고해주세요.

 

C# : 공인인증서 NPKI 폴더 위치 찾기 및 콤보박스에 목록 보여주기

이번 글에서는 yessign 폴더에 있는 공인인증서의 이름을 콤보박스에 넣는 방법에 대해 알아보도록 합시다. // 전역변수 // 인증서 콤보박스에 쓸 DataTable DataTable _dtCertInfo = new DataTable(); // 생성자..

milkoon1.tistory.com

자 이제 활용단계입니다. 위의 링크는 단순히 NPKI경로로 가서 해당 인증서폴더의 이름만 가져왔습니다. 하지만 저희는 해당 인증서의 정보가 필요한 것이죠. 정보를 빼낼 때 필요한 것들은 SignCert.der경로, SignPri.key경로입니다.

using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Asn1;

public void GetCertInfo()
{
    try
    {
        string szSignCertFile = "SignCert.der경로";
        string szSingPriFile = "SignPri.key경로";

        X509CertificateStructure xCert;
        X509Certificate2 cert;
        byte[] byteCert;

        // 인증서 읽기
        cert = new X509Certificate2(szSignCertFile);
        byteCert = File.ReadAllBytes(szSignCertFile);
        xCert = X509CertificateStructure.GetInstance(Asn1Object.FromByteArray(byteCert));

        //--------------------------------------------------------------

        // 인증서, 개인키 파일경로 저장
        string CertFilePath = szSignCertFile;
        string CertPivateKeyFilePath = szSingPriFile;

        // 인증서명
        string CertName = cert.GetNameInfo(X509NameType.DnsName, false);

        // 인증기관
        string RegOrganization = cert.GetNameInfo(X509NameType.DnsName, true);

        // 인증서 등록(시작)일
        string RegDate = cert.NotBefore.ToString("yyyyMMdd");

        // 인증서 만료일
        string ExpDate = cert.NotAfter.ToString("yyyyMMdd");

        // 인증서 일련번호
        // 16진수 문자열을 숫자로 변경 - 앞에 '0'을 제외
        string SerialNo = cert.SerialNumber.TrimStart('0');
    }
    catch (Exception ex)
    {
        // 예외 처리
        Trace.WriteLine(ex.ToString());
        return;
    }
}

위의 메소드와 같이 처리하시면 인증서명, 인증기관, 인증서등록일, 만료일 등 정보를 가져올 수 있답니다!

Comments