Получить сертификат клиента с карты DoD CAC - PullRequest
3 голосов
/ 24 октября 2011

У меня есть приложение C, которое использует LibCurl (LibCurl - это API C, который устанавливает HTTP-соединение с веб-сервером). Используя LibCurl, мне нужно загрузить файл с HTTPS-сервера, для которого требуется сертификат клиента.

Пока наше техническое решение отлично работает.

Моя проблема в том, что клиентский сертификат, который нам нужно использовать, находится на карте DoC CAC. Мне нужно иметь возможность извлечь сертификат клиента с карты DAC CAC (из моего приложения C) и либо записать его в файл, либо просто сослаться на файл в CAC. Этот письменный или ссылочный файл будет указан в качестве моего клиентского сертификата в моем подключении HTTPS.

Я не знаю, как найти или ссылаться на сертификат клиента на карте DoC CAC. Любая помощь очень ценится. Спасибо.

Ответы [ 2 ]

3 голосов
/ 24 октября 2011

Когда activeClient публикует сертификаты карты CAC в Windows, он должен экспортировать сертификаты в хранилище.Возможно, вам придется автоматизировать экспорт сертификата из вашего локального хранилища сертификатов в файл типа .pfx или .p7b.Может быть, я не знаю, возможно ли это.Он должен быть защищен pwd.

Я не думаю, что вы можете сделать это напрямую с карты CAC без промежуточного среднего уровня (например, хранилища сертификатов).

0 голосов
/ 23 июля 2015

Это метод для C #, он может помочь с 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, но на всякий случай я мог их опубликовать.

...