Интерфейс 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>
С++ Copy Code
CoCreateInstance(&__uuidof(PrivateKeyUsageValidator), ...);
С 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, генерируемое по умолчанию:
С# |
![]() |
---|---|
bool IsCertValidOnTime(object Certificate, DateTime DateTime); |
Определение метода IPrivateKeyUsageValidator.IsCertValidNow, генерируемое по умолчанию:
С# |
![]() |
---|---|
bool IsCertValidNow(object Certificate); |
В следующем примере представлены варианты использования проверок сертификата с использованием
// Получаем сертфикат 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, генерируемое по умолчанию:
С# |
![]() |
---|---|
bool IsChainValid(object Chain); |
В следующем примере представлены варианты использования проверок цепочки с использованием
// Получаем цепочку 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\ и регистрируется в реестре с указанием полного пути к ней.