Функции для работы с сертификатами

createCSR

createCSR(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE publicKey, CK_CHAR_PTR dn, CK_ULONG dnLength, CK_BYTE_PTR csr, CK_ULONG_PTR csrLength, CK_OBJECT_HANDLE privateKey, CK_CHAR_PTR attributes, CK_ULONG attributesLength, CK_CHAR_PTR extensions, CK_ULONG extensionsLength)
Параметры:
  • session (in) – дескриптор сеанса.
  • publicKey (in) – дескриптор открытого ключа для создания сертификата.
  • dn (in) –

    указатель на массив типа CK_BYTE, задающий отличительное имя (distinguished name). Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID), например: CN или 2.5.4.3.
    • Вторая строка – значение поля, например: Andrey Borisov в кодировке UTF-8.
  • dnLength (in) – количество строк в массиве, на который указывает dn.
  • csr (out) – указатель на массив байтов, в который будет записан созданный запрос на сертификат. Память для массива выделяется самой функцией createCSR. После окончания работы с массивом выделенную для него память необходимо освободить, вызвав функцию freeBuffer().
  • csrLength (out) – указатель на переменную, в которой сохраняется размер массива, на который указывает csr.
  • privatekey (in) – дескриптор закрытого ключа, соответствующего открытому ключу, на который ссылается publicKey. Если privateKey принимает значение 0, то поиск закрытого ключа будет осуществляться по идентификатору ключевой пары (CKA_ID открытого ключа).
  • attributes (in) –

    указатель на массив типа CK_BYTE, задающий дополнительные атрибуты. Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID).
    • Вторая строка – значение поля.
  • attributeslength (in) – количество строк в массиве, на который указывает attributes.
  • extensions (in) –

    указатель на массив типа CK_BYTE, задающий расширения. Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID).
    • Вторая строка – значение поля.
  • extensionsLength (in) – количество строк в массиве, на который указывает extensions.

Функция createCSR формирует запрос на выпуск сертификата.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

Пример использования функции createCSR

// дескриптор сессии
CK_SESSION_HANDLE session = 0;
// дескриптор открытого ключа
CK_OBJECT_HANDLE publicKey;
// distinguished name для запроса на сертификат
CK_CHAR_PTR dn[] =
{
  (CK_CHAR_PTR)"CN",
  (CK_CHAR_PTR)"Ivan Ivanov",
  (CK_CHAR_PTR)"C",
  (CK_CHAR_PTR)"RU"
};
// extensions для  запроса на сертификат
CK_CHAR_PTR exts[] =
{
  //(CK_CHAR_PTR)"1.2.3.5",
  //(CK_CHAR_PTR)"DER:01020304",
  //(CK_CHAR_PTR)"2.5.29.16",
  //(CK_CHAR_PTR)"ASN1:SEQUENCE:privateKeyUsagePeriod\n[privateKeyUsagePeriod]\nnotAfter=IMPLICIT:1,GENERALIZEDTIME:20150101000000Z",
  //(CK_CHAR_PTR)"subjectKeyIdentifier",
  //(CK_CHAR_PTR)"1234567890abcdef",
  //(CK_CHAR_PTR)"1.2.3.4",
  //(CK_CHAR_PTR)"ASN1:IA5STRING:This is a string",
  (CK_CHAR_PTR)"keyUsage",
  (CK_CHAR_PTR)"digitalSignature,keyEncipherment"
};
// запрос на сертификат
CK_BYTE_PTR csr = NULL;
CK_ULONG csrLength = 0;

rv = createCSR(session, publicKey, dn, sizeof(dn)/sizeof(CK_CHAR_PTR), &csr, &csrLength, 0, NULL, 0, exts, sizeof(exts)/sizeof(CK_CHAR_PTR));
if (rv != CKR_OK)
{
  PrintError("createCSR", rv);
  goto end;
}

printf("Create CSR: OK\n");

createCSREx

createCSREx(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE publicKey, CK_CHAR_PTR* dn, CK_ULONG dnLength, CK_BYTE_PTR* csr, CK_ULONG_PTR csrLength, CK_OBJECT_HANDLE privateKey, CK_CHAR_PTR* attributes, CK_ULONG attributesLength, CK_CHAR_PTR* extensions, CK_ULONG extensionsLength, CK_MECHANISM_PTR signatureMech)
Параметры:
  • session (in) – дескриптор сеанса.
  • publicKey (in) – дескриптор открытого ключа для создания сертификата.
  • dn (in) –

    указатель на массив типа CK_BYTE, задающий отличительное имя (distinguished name). Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID), например: CN или 2.5.4.3.
    • Вторая строка – значение поля, например: Andrey Borisov в кодировке UTF-8.
  • dnLength (in) – количество строк в массиве, на который указывает dn.
  • csr (out) – указатель на массив байтов, в который будет записан созданный запрос на сертификат. Память для массива выделяется самой функцией createCSR. После окончания работы с массивом выделенную для него память необходимо освободить, вызвав функцию freeBuffer().
  • csrLength (out) – указатель на переменную, в которой сохраняется размер массива, на который указывает csr.
  • privatekey (in) – дескриптор закрытого ключа, соответствующего открытому ключу, на который ссылается publicKey. Если privateKey принимает значение 0, то поиск закрытого ключа будет осуществляться по идентификатору ключевой пары (CKA_ID открытого ключа).
  • attributes (in) –

    указатель на массив типа CK_BYTE, задающий дополнительные атрибуты. Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID).
    • Вторая строка – значение поля.
  • attributeslength (in) – количество строк в массиве, на который указывает attributes.
  • extensions (in) –

    указатель на массив типа CK_BYTE, задающий расширения. Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID).
    • Вторая строка – значение поля.
  • extensionsLength (in) – количество строк в массиве, на который указывает extensions.
  • signatureMech (in) – указатель на механизм подписи.

Расширенный вариант функции createCSR(). Формирует запрос на выпуск сертификата.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

verifyReq

verifyReq(CK_BYTE_PTR csr, CK_ULONG csrLength)
Параметры:
  • csr (in) – указатель на массив байтов, содержащий запрос на сертификат.
  • csrLength (in) – размер массива, на который указывает csr.

Функция verifyReq позволяет проверить подпись в запросе на сертификат. Возвращаемое значение определяет результат проверки:

  • CKR_OK – подпись действительна,
  • CKR_SIGNATURE_INVALID – подпись недействительна.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

verifyReqEx

verifyReqEx(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE publicKey, CK_BYTE_PTR csr, CK_ULONG csrLength, CK_MECHANISM_PTR mech)
Параметры:
  • session (in) – дескриптор сеанса.
  • publicKey (in) – дескриптор открытого ключа для создания сертификата.
  • csr (in) – указатель на массив байтов, содержащий запрос на сертификат.
  • csrLength (in) – размер массива, на который указывает csr.
  • mech (in) – механизм проверки подписи.

Расширенный вариант функции verifyReq(). Позволяет проверить подпись в запросе на сертификат. Возвращаемое значение определяет результат проверки:

  • CKR_OK – подпись действительна,
  • CKR_SIGNATURE_INVALID – подпись недействительна.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

genCert

genCert(CK_SESSION_HANDLE session, CK_BYTE_PTR csr, CK_ULONG csrLength, CK_OBJECT_HANDLE privateKey, CK_CHAR_PTR serial, CK_CHAR_PTR* issuerDN, CK_ULONG issuerDNLength, CK_ULONG days, CK_BYTE_PTR* certificate, CK_ULONG_PTR certificateLength)
Параметры:
  • session (in) – дескриптор сеанса.
  • csr (in) – указатель на массив байтов, содержащий запрос на сертификат.
  • csrLength (in) – размер массива, на который указывает csr.
  • privateKey (in) – дескриптор закрытого ключа издателя сертификата.
  • serial (in) – указатель на строку, содержащую серийный номер сертификата.
  • issuerDN (in) –

    указатель на массив типа CK_BYTE, задающий отличительное имя (distinguished name). Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID), например: CN или 2.5.4.3.
    • Вторая строка – значение поля, например: Andrey Borisov в кодировке UTF-8.

    Если issuerDN принимает значение NULL_PTR, отличительное имя издателя сертификата будет совпадать с отличительным именем субъекта.

  • issuerDNLength (in) – количество элементов-строк в массиве, на который указывает issuerDN.
  • days (in) – срок действия сертификата в днях.
  • сertificate (out) – указатель на указатель на массив байтов (буфер), в который будет записан сертификат. Память для буфера выделяется самой функцией genCert. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • сertificateLength (out) – указатель на переменную, которая при выполнении функции genCert примет значение, равное длине сгенерированного сертификата в байтах.

Функция genCert позволяет создать сертификат из запроса на сертификат.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

genCertEx

genCertEx(CK_SESSION_HANDLE session, CK_BYTE_PTR csr, CK_ULONG csrLength, CK_OBJECT_HANDLE privateKey, CK_CHAR_PTR serial, CK_CHAR_PTR* issuerDN, CK_ULONG issuerDNLength, CK_ULONG days, CK_BYTE_PTR* certificate, CK_ULONG_PTR certificateLength, CK_MECHANISM_PTR mech)
Параметры:
  • session (in) – дескриптор сеанса.
  • csr (in) – указатель на массив байтов, содержащий запрос на сертификат.
  • csrLength (in) – размер массива, на который указывает csr.
  • privateKey (in) – дескриптор закрытого ключа издателя сертификата.
  • serial (in) – указатель на строку, содержащую серийный номер сертификата.
  • issuerDN (in) –

    указатель на массив типа CK_BYTE, задающий отличительное имя (distinguished name). Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID), например: CN или 2.5.4.3.
    • Вторая строка – значение поля, например: Andrey Borisov в кодировке UTF-8.

    Если issuerDN принимает значение NULL_PTR, отличительное имя издателя сертификата будет совпадать с отличительным именем субъекта.

  • issuerDNLength (in) – количество элементов-строк в массиве, на который указывает issuerDN.
  • days (in) – срок действия сертификата в днях.
  • сertificate (out) – указатель на указатель на массив байтов (буфер), в который будет записан сертификат. Память для буфера выделяется самой функцией genCert. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • сertificateLength (out) – указатель на переменную, которая при выполнении функции genCert примет значение, равное длине сгенерированного сертификата в байтах.
  • mech (in) – механизм подписи.

Расширенный вариант функции genCert(). Позволяет создать сертификат из запроса на сертификат.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

certVerify

certVerify(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE certificateToVerify, CK_OBJECT_HANDLE_PTR trustedCertificates, CK_ULONG trustedCertificatesLength, CK_OBJECT_HANDLE_PTR certificateChain, CK_ULONG certificateChainLength, CK_BYTE_PTR crls, CK_ULONG_PTR crlsLengths, CK_ULONG crlsLength)
Параметры:
  • session (in) – дескриптор сеанса.
  • certificateToVerify (in) – дескриптор сертификата, который необходимо проверить.
  • trustedCertificates (in) – указатель на массив, содержащий доверенные сертификаты.
  • trustedCertificatesLength (in) – количество сертификатов в массиве, на который указывает trustedCertificates.
  • certificateChain (in) – указатель на массив, содержащий дескрипторы промежуточных сертификатов (имеет значение 0, если промежуточные сертификаты отсутствуют).
  • certificateChainLength (in) – количество дескрипторов объектов-сертификатов, в массиве, на который указывает certificateChain. Этот аргумент должен иметь значение 0, если certificateChain принимает такое значение.
  • crls (in) – указатель на массив указателей на списки отозванных сертификатов.
  • crlsLengths (in) – указатель на массив с длиной списка на который указывает crls.
  • crlsLength (in) – количество списков отозванных сертификатов в массиве clrs.

Функция certVerify используется для проверки сертификатов по всему пути сертификации.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

getCertificateInfo

getCertificateInfo(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE certificate, CK_CHAR_PTR* certificateInfo, CK_ULONG* certificateInfoLength)
Параметры:
  • session (in) – дескриптор сеанса.
  • certificate (in) – дескриптор объекта-сертификата.
  • certificateInfo (out) – указатель на массив байтов, в который будет записана информация о сертификате. Память для массива выделяется самой функцией getCertificateInfo. После окончания работы с массивом выделенную для него память необходимо освободить, вызвав функцию freeBuffer().
  • certificateInfoLength (out) – размер массива, в который возвращается информация о сертификате.

Функция getCertificateInfo используется для получения сведений о сертификате с заданным дескриптором в текстовом виде.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

getCertificateInfoEx

getCertificateInfoEx(CK_BYTE_PTR certificate, CK_ULONG certificateLength, CK_CHAR_PTR* certificateInfo, CK_ULONG* certificateInfoLength)
Параметры:
  • certificate (in) – указатель на массив байтов, содержащий сертификат в DER-кодировке.
  • certificateLength (in) – длина массива байтов, на который указывает certificate.
  • certificateInfo (out) – указатель на указатель на массив байтов (буфер), в который будет записана информация о сертификате. Память для массива выделяется самой функцией getCertificateInfoEx. После окончания работы с массивом выделенную для него память необходимо освободить, вызвав функцию freeBuffer().
  • certificateInfoLength (out) – размер массива, в который возвращается информация о сертификате.

Функция getCertificateInfoEx используется для получения сведений о сертификате в текстовом виде. В отличие от функции getCertificateInfo сертификат не определяется дескриптором, а задаётся явно.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

getCertificateAttribute

getCertificateAttribute(CK_BYTE_PTR x509data, CK_ULONG dataLength, CK_BYTE dataId, CK_BYTE_PTR* outputdata, CK_ULONG_PTR outputdatalength)
Параметры:
  • x509data (in) – сертификат в формате x509.
  • dataLength (in) – размер сертификата.
  • dataId (in) –

    идентификатор получаемых данных:

    • X509_SUBJECT (0x01) – владелец сертификата,
    • X509_ISSUER (0x02) – издатель сертификата,
    • X509_SERIAL (0x03) – серийный номер сертификата.
  • outputdata (out) – выходные данные.
  • outputdatalength (out) – размер выходных данных.

Получить параметры сертификата.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

checkCertSignature

checkCertSignature(CK_SESSION_HANDLE session, CK_BYTE_PTR certToCheck, CK_ULONG certToCheckLength, CK_BYTE_PTR trustedSignerCert, CK_ULONG trustedSignerCertLength)
Параметры:
  • session (in) – дескриптор сеанса.
  • certToCheck (in) – указатель на сертификат на проверку в DER-формате.
  • certToCheckLength (in) – длина сертификата на проверку.
  • trustedSignerCert (in) – указатель на сертификат подписанта.
  • trustedSignerCertLength (in) – длина сертификата подписанта.

Проверка подписи в сертификате на соответствие ключу его подписанта. Проверка подписи выполняется аппаратно. Хеширование выполняется аппаратно, если была вызвана функция useHardwareHash(CK_TRUE).

Функция verifyReq позволяет проверить подпись в запросе на сертификат. Возвращаемое значение определяет результат проверки:

  • CKR_OK – подпись действительна,
  • CKR_SIGNATURE_INVALID – подпись недействительна.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.