2011-10-24 3 views
3

LibCurl을 사용하는 C 응용 프로그램이 있습니다 (LibCurl은 웹 서버에 HTTP 연결을 만드는 C API입니다). LibCurl을 사용하면 클라이언트 인증서가 필요한 HTTPS 서버에서 파일을 다운로드해야합니다.DoD CAC 카드에서 클라이언트 인증서 얻기

지금까지 우리의 기술 솔루션은 훌륭했습니다.

제 문제는 우리가 사용해야하는 클라이언트 인증서가 DoD CAC 카드에 있다는 것입니다. DOD CAC 카드 (내 C 응용 프로그램 내)에서 클라이언트 인증서를 가져 와서 파일에 쓰거나 CAC에서 파일을 참조 할 수 있어야합니다. 이렇게 작성되거나 참조 된 파일은 HTTPS 연결에서 내 클라이언트 인증서로 지정됩니다.

DoD CAC 카드에서 클라이언트 인증서를 찾거나 참조하는 방법을 모르겠습니다. 어떤 도움이라도 대단히 감사합니다. 감사.

답변

3

activeClient가 CAC 카드 인증서를 창에 게시 할 때 certs를 저장소로 내 보내야합니다. 로컬 인증서 저장소에서 .pfx 또는 .p7b 형식과 같은 파일로 인증서를 내보내는 작업을 자동화해야 할 수 있습니다. 어쩌면. 가능하다면 나는 모른다. 보호해야합니다.

저는 CAC 카드에서 인증서 저장소와 같은 중간 중간 계층을 사용하지 않고 직접 처리 할 수 ​​있다고 생각하지 않습니다.

+0

CAC 카드를 삽입하면 클라이언트 인증서가 자동으로 인증서 저장소에 복사됩니다. 궁극적으로 .pem 형식의 인증서가 필요합니다 (가능한 경우). – kmehta

+0

Windows Credential Manager는 어떻습니까? – bahrep

0

이것은 C#에 도움이 될 수있는 방법입니다. C 코드에 익숙하지 않습니다. 얻고 인증서를 내보낼

using System.Security.Cryptography; 
using System.Security.Cryptography.X509Certificates; 
private static X509Certificate GetClientCert() 
{ 
    X509Store store = null; 
    try 
    { 
    store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly); 

    var certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Integration Client Certificate", true); 
    if (certs.Count == 1) 
    { 
     var cert = certs[0]; 
     return cert; 
    } 
    } 
    finally 
    { 
    if (store != null) 
    store.Close(); 
    } 

return null; 
} 

코드는 수출 방법은 내가 하나가 당신이 언급하는 형식이 될 것인지 확실하지 오전에 수출하기 위해 다양한 종류가

//This will bring up the selection prompt to select your cert 


X509Certificate c = GetClientCert(); 


//The password should be the pin converted to a secure string variable. 
//note the code above will not prompt for a pin if you want this you will have to build the prompt yourself. It will only select the certificate. 

c.Export(X509ContentType.Cert, securestring password); 

입니다. 이것은 당신이 가지고 놀 필요가있는 것입니다. C 언어로 라이브러리를 사용할 수 있을지 확신 할 수 없지만 게시 할 수 있기 때문에.