Функция CertNameToStrA (wincrypt.h)
Функция CertNameToStr преобразует закодированное имя в структуре CERT_NAME_BLOB в символьную строку, завершаемую null.
Строковое представление соответствует спецификациям различающегося имени в RFC 1779. Исключения из этого правила перечислены в разделе Примечания ниже.
Синтаксис
DWORD CertNameToStrA(
[in] DWORD dwCertEncodingType,
[in] PCERT_NAME_BLOB pName,
[in] DWORD dwStrType,
[out] LPSTR psz,
[in] DWORD csz
);
Параметры
[in] dwCertEncodingType
Тип кодирования сертификата, который использовался для кодирования имени. Эта функция игнорирует идентификатор типа кодирования сообщений , содержащийся в высоком значении WORD .
Этот параметр может быть следующим определенным в настоящее время типом кодирования сертификата.
Значение | Значение |
---|---|
|
Задает кодировку сертификата X.509. |
[in] pName
Указатель на структуру CERT_NAME_BLOB для преобразования.
[in] dwStrType
Этот параметр задает формат выходной строки. Этот параметр также задает другие параметры для содержимого строки.
Этот параметр может принимать одно из указанных ниже значений.
Значение | Значение |
---|---|
|
Все идентификаторы объектов (OID) отклоняются. CERT_RDN записи разделяются запятой, за которой следует пробел (, ). Несколько атрибутов в CERT_RDN разделяются знаком "плюс", заключенным в пробелы ( + ), например Microsoft, Ким Аберкромби + Программист. |
|
OID включаются с разделителем знака равенства (=) от значения атрибута. CERT_RDN записи разделяются запятой, за которой следует пробел (, ). Несколько атрибутов в CERT_RDN разделяются знаком "плюс", за которым следует пробел (+). |
|
Идентификаторы OID преобразуются в имена ключей X.500 ; В противном случае они совпадают с CERT_OID_NAME_STR. Если OID не имеет соответствующего имени X.500, он используется с префиксом OID.
Значение RDN включается в кавычки, если оно содержит начальные или конечные пробелы или один из следующих символов:
|
Следующие параметры также можно объединить с приведенным выше значением, чтобы указать дополнительные параметры для строки.
Значение | Значение |
---|---|
|
Замените запятую, за которой следует разделитель пробела (, ), точкой с запятой и разделителем пробела (; ). |
|
Замените запятую, за которой следует пробел (, ), на обратную косую черту, за которой следует буква r, за которой следует обратная косая черта, за которой следует разделитель буквы n (\r\n). |
|
Замените знак "плюс", заключенный в разделитель пробелов ( + ), одним разделителем пробелов. |
|
Отключить кавыкание. |
|
Порядок RDN в строке различающегося имени после декодирования отменяется. Этот флаг не установлен по умолчанию. |
|
По умолчанию строка ключа CERT_RDN_T61_STRING X.500 декодируется как UTF8. Если декодирование UTF8 завершается сбоем, ключ X.500 декодируется как 8-разрядный символ. Используйте CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG, чтобы пропустить начальную попытку декодировать как UTF8. |
|
Если имя, на которое указывает параметр pName, содержит RDN электронной почты, а часть имени узла адреса электронной почты содержит IA5String в кодировке Punycode, имя преобразуется в эквивалент Юникода.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение не поддерживается. |
[out] psz
Указатель на буфер символов, получающий возвращаемую строку. Размер этого буфера указывается в параметре csz .
[in] csz
Размер буфера psz (в символах). Размер должен включать завершающий символ NULL.
Возвращаемое значение
Возвращает количество преобразованных символов, включая завершающий символ NULL.
Если psz имеет значение NULL или csz равно нулю, возвращает требуемый размер строки назначения.
Комментарии
Если psz не имеет значение NULL , а csz не равен нулю, возвращаемый psz всегда является строкой, заканчивающейся null.
Рекомендуется не использовать многокомпонентные RDN (например, CN=James+O=Microsoft), чтобы избежать возможных проблем с упорядочением при декодировании. Вместо этого рассмотрите возможность использования однозначных RDN (например, CN=James, O=Microsoft).
Строковое представление соответствует спецификациям различающихся имен в RFC 1779 , за исключением отклонений, описанных в следующем списке.
- Имена, содержащие кавычки, заключаются в двойные кавычки.
- Пустые строки заключаются в двойные кавычки.
- Строки, содержащие последовательные пробелы, не заключаются в кавычки.
- Значения относительного различающегося имени (RDN) типа CERT_RDN_ENCODED_BLOB или CERT_RDN_OCTET_STRING форматируются в шестнадцатеричном формате.
- Если OID не имеет соответствующего имени X.500, префикс "OID" используется перед OID.
- Значения RDN заключаются в двойные кавычки (вместо "\"), если они содержат начальные пробелы, конечные пробелы или один из следующих символов:
- Запятая (,)
- Знак "плюс" (+)
- Знак равенства (=)
- Дюйм (")
- Обратная косая черта (/)
- Знак меньше (<)
- Знак "Больше" (>)
- Знак номера (#)
- Точка с запятой (;)
- Имя ключа X.500 для OID stateOrProvinceName (2.5.4.8) — "S". Это значение отличается от имени ключа X.500 RFC 1779 (ST).
Ключ | Строка идентификатора объекта |
---|---|
E | 1.2.840.113549.1.9.1 |
T | 2.5.4.12 |
G | 2.5.4.42 |
I | 2.5.4.43 |
SN | 2.5.4.4 |
Примеры
Пример использования этой функции см. в разделе
Пример программы C. Преобразование имен из сертификатов в ASN.1 и обратно.
Примечание
Заголовок wincrypt.h определяет CertNameToStr в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |