Развернуть все
Свернуть все

Использование интерфейса COM

Интерфейс COM описан в настоящем руководстве. Интерфейс доступен только для операционных систем семейства Windows. Для его использования в инструментарий разработчика включены следующие файлы:
Описание Имя файла
Заголовочный файл pkivalidator.h
Идентификаторы GUID pkivalidator_i.c
Библиотека DLL pkivalidator.dll, доступна для платформ Win32, x64 и Itanium
Модуль слияния pkivalidator_win32.msm, pkivalidator_x64.msm, pkivalidator_itanium.msm

Использование

Язык программирования С/С++

Для использования интерфейса COM существуют следующие возможности:

  • Включить в код приложения заголовочный файл pkivalidator.h, входящий в состав SDK:

    С/С++ Copy Code
    #include <pkivalidator.h>
    Для получения идентификаторов GUID интерфейса или класса, можно воспользоваться оператором __uuidof(). Например:
    С++ Copy Code
    CoCreateInstance(&__uuidof(PrivateKeyUsageValidator), ...);
    Если вы используете язык программирования С, следует включить в код приложения файл идентификаторов GUID pkivalidator_i.c, входящий в состав SDK. При этом файл pkivalidator_i.c необходимо включить в код приложения только однажды, повторное включение приведет к ошибке компоновщика (линкера).
    С Copy Code
    #include <pkivalidator_i.c>
    В этом случае создать объект можно, например, так:
    С Copy Code
    CoCreateInstance(&CLSID_PrivateKeyUsageValidator, ...);

  • Импортировать библиотеку pkivalidator.dll. При этом библиотека pkivalidator.dll должна находиться в каталоге, указанном в пути INCLUDE, либо в одном каталоге с исходными файлами Вашего приложения.

    С/С++ Copy Code
    #import "pkivalidator.dll"

.NET (на примере языка C#)

Для использования интерфейса COM в среде .NET существуют следующие возможности:

  • добавить ссылку на зарегистрированный COM-объект References->Add Reference...->COM и выбрать Crypto-Pro PKI Object Validation v1.0 Type Library. Visual Studio сгенерирует файл Interop.PKIValidatorLib.dll, открыв который в Object Browser можно посмотреть интерфейс COM-компонента.

  • другие возможности можно посмотреть в статье "Взаимодействие с неуправляемым кодом" . Лишь кратко отметим, что при изменении типов параметров с генерируемых по умолчанию на другие, необходимо будет учитывать особенности упаковки параметров при передаче их из управляемого в неуправляемый код.

Определение метода IPrivateKeyUsageValidator.IsCertValidOnTime, генерируемое по умолчанию:

С# Copy Code
bool IsCertValidOnTime(object Certificate, DateTime DateTime);

Определение метода IPrivateKeyUsageValidator.IsCertValidNow, генерируемое по умолчанию:

С# Copy Code
bool IsCertValidNow(object Certificate);

В следующем примере представлены варианты использования проверок сертификата с использованием CAPICOM.Certificate и X509Certificate2 :

C#
        // Получаем сертфикат CAPICOM (существует только 32-битная capicom.dll!)
        CAPICOM.CertificateClass certCapicom = GetCapicomCertificate();
        
        // Получаем сертификат X509Certificate2
        System.Security.Cryptography.X509Certificates.X509Certificate2 certX509 =
                GetX509Certificate();

        // Получаем момент времени, на который 
        // необходимо осуществить проверку
        DateTime time = GetVerifyingTime();

        // Создаем объект 
        PKIValidatorLib.PrivateKeyUsageValidatorClass validator =
                new PKIValidatorLib.PrivateKeyUsageValidatorClass();

        bool isValidByPKUPOnTime;
        bool isValidByPKUPNow;
        try
        {
                isValidByPKUPOnTime = validator.IsCertValidOnTime(certCapicom, time);
                // Можно воспользоваться X509Certificate2, при этом будет передаваться PCCERT_CONTEXT
                // Обязательно надо преобразовать IntPtr с помощью метода IntPtr.ToInt64(), иначе
                // 64-битный указатель будет передан неправильно!
                isValidByPKUPOnTime = validator.IsCertValidOnTime(certX509.Handle.ToInt64(), time);

                // точно так же можно проверить на текущий момент
                isValidByPKUPNow = validator.IsCertValidNow(certCapicom);
        }
        catch (Exception ex)
        {
                DoSmthIfError("Invalid Parameter" + ex.Message);
                return;
        }

        if (!isValidByPKUPOnTime)
                DoSmthIfError("Was not valid at " + time.ToString());

        if (!isValidByPKUPNow)
                DoSmthIfError("Not valid now");

Определение метода IPrivateKeyUsageValidator.IsChainValid, генерируемое по умолчанию:

С# Copy Code
bool IsChainValid(object Chain);

В следующем примере представлены варианты использования проверок цепочки с использованием CAPICOM.Chain и X509Chain :

C#
        // Получаем цепочку CAPICOM (существует только 32-битная capicom.dll!)
        CAPICOM.ChainClass chainCapicom = GetCapicomChain();

        // Получаем цепочку X509Chain
        System.Security.Cryptography.X509Certificates.X509Chain chainX509 =
                GetX509Chain();

        // Получаем момент времени, на который 
        // необходимо осуществить проверку
        DateTime time = GetVerifyingTime();

        // Создаем объект 
        PKIValidatorLib.PrivateKeyUsageValidatorClass validator =
                new PKIValidatorLib.PrivateKeyUsageValidatorClass();

        bool isChainValidByPKUP;
        try
        {
                isChainValidByPKUP = validator.IsChainValid(chainCapicom);
                // Можно воспользоваться X509Chain, при этом будет передаваться PCCERT_CHAIN_CONTEXT
                // Обязательно надо преобразовать IntPtr с помощью метода IntPtr.ToInt64(), иначе
                // 64-битный указатель будет передан неправильно!
                isChainValidByPKUP = validator.IsChainValid(chainX509.ChainContext.ToInt64());
        }
        catch (Exception ex)
        {
                DoSmthIfError("Invalid Parameter" + ex.Message);
                return;
        }

        if (!isChainValidByPKUP)
                DoSmthIfError("Chain is not valid by PKUP");

Другие языки программирования

Если используемый Вами язык программирования и среда разработки поддерживают COM, следуйте инструкциям, изложенным в руководстве по используемой Вами среде разработки.

Библиотека pkivalidator.dll устанавливается в папку %CommonProgramFiles%\Crypto Pro\Shared\ и регистрируется в реестре с указанием полного пути к ней.