Поделиться через


Функция CertNameToStrA (wincrypt.h)

Функция CertNameTo Str преобразует закодированное имя в структуре 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 этого значения, игнорируется этой функцией.

Этот параметр может быть следующим заданным в настоящее время типом кодирования сертификатов.

Ценность Значение
X509_ASN_ENCODING
1 (0x1)
Задает кодировку сертификата X.509.

[in] pName

Указатель на преобразованную структуру CERT_NAME_BLOB.

[in] dwStrType

Этот параметр задает формат выходной строки. Этот параметр также задает другие параметры содержимого строки.

Этот параметр может быть одним из следующих значений.

Ценность Значение
CERT_SIMPLE_NAME_STR
1
Все идентификаторы объектов (OID) удаляются. CERT_RDN записи разделены запятой, за которой следует пробел (, ). Несколько атрибутов в CERT_RDN разделены знаком плюса, заключенным в пробелы (+ ), например, Microsoft, Ким Аберкромби + Программист.
CERT_OID_NAME_STR
2
OID включаются в разделитель равенства (=) от значения атрибута. CERT_RDN записи разделены запятой, за которой следует пробел (, ). Несколько атрибутов в CERT_RDN разделены знаком плюса, за которым следует пробел (+ ).
CERT_X500_NAME_STR
3
OID преобразуются в их имена ключей X.500; в противном случае они совпадают с CERT_OID_NAME_STR. Если у OID нет соответствующего имени X.500, OID используется с префиксом OID.

Значение RDN цитируется, если он содержит начальный или конечный пробел или один из следующих символов:

  • Запятая (,)
  • Знак плюса (+)
  • Знак равенства (=)
  • Знак дюйма (")
  • Обратная косая черта, за которой следует буква n (\n)
  • Меньше знака (<)
  • Больше знака (>)
  • Знак номера (#)
  • Точка с запятой (;)
Символ кавычки — это дюйм ("). Если значение RDN содержит отметку дюйма, она заключена в кавычки ("").
 

Следующие параметры также можно объединить со значением выше, чтобы указать дополнительные параметры строки.

Ценность Значение
CERT_NAME_STR_SEMICOLON_FLAG
0x40000000
Замените запятую, за которой следует разделитель пробела (,) точкой с запятой, за которой следует разделитель пробела (; ).
CERT_NAME_STR_CRLF_FLAG
0x08000000
Замените запятую, за которой следует пробел (, ) разделитель обратной косой чертой, за которой следует буква r, за которой следует обратная косая черта, за которой следует разделитель буквы n (\r\n).
CERT_NAME_STR_NO_PLUS_FLAG
0x20000000
Замените знак плюса, заключенный в разделитель пробелов (+) одним разделителем пробелов.
CERT_NAME_STR_NO_QUOTING_FLAG
0x10000000
Отключите кавычение.
CERT_NAME_STR_REVERSE_FLAG
0x02000000
Порядок RDN в строке различаемого имени будет отменен после декодирования. Этот флаг по умолчанию не задан.
CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG
0x00010000
По умолчанию строка ключа X.500 CERT_RDN_T61_STRING декодируется как UTF8. Если декодирование UTF8 завершается ошибкой, ключ X.500 декодируется как 8-разрядный символ. Используйте CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG, чтобы пропустить начальную попытку декодировать как UTF8.
CERT_NAME_STR_ENABLE_PUNYCODE_FLAG
0x00200000
Если имя, на которое указывает параметр pName, содержит RDN электронной почты, а часть имени узла адреса электронной почты содержит код в кодировке Punycode IA5String, имя преобразуется в эквивалент Юникода.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение не поддерживается.

[out] psz

Указатель на буфер символов, получающий возвращаемую строку. Размер этого буфера указывается в параметре csz .

[in] csz

Размер в символах буфера psz. Размер должен содержать завершающийся символ NULL.

Возвращаемое значение

Возвращает количество преобразованных символов, включая завершающий символ NULL.

Если psznull или csz равно нулю, возвращает требуемый размер конечной строки.

Замечания

Если psz не NULL и csz не равно нулю, возвращаемый psz всегда является строкой, завершающей значение NULL.

Рекомендуется использовать многокомпонентные RDN (например, CN=James+O=Microsoft), чтобы избежать возможных проблем упорядочивания при декодировании. Вместо этого рекомендуется использовать однозначные RDN (например, CN=Джеймс, O=Microsoft).

Строковое представление соответствует спецификациям различающихся имен в RFC 1779 за исключением отклонений, описанных в следующем списке.

  • Имена, содержащие кавычки, заключены в двойные кавычки.
  • Пустые строки заключены в двойные кавычки.
  • Строки, содержащие последовательные пробелы, не заключены в кавычки.
  • Значения относительного различающегося имени (RDN) типа CERT_RDN_ENCODED_BLOB или CERT_RDN_OCTET_STRING форматируются в шестнадцатеричном формате.
  • Если у OID нет соответствующего имени X.500, префикс "OID" используется перед OID.
  • Значения RDN заключены в двойные кавычки (вместо \), если они содержат начальные пробелы, конечные пробелы или один из следующих символов:
    • Запятая (,)
    • Знак плюса (+)
    • Знак равенства (=)
    • Знак дюйма (")
    • Обратная косая черта (/)
    • Меньше знака (<)
    • Больше знака (>)
    • Знак номера (#)
    • Точка с запятой (;)
  • Имя ключа X.500 для stateOrProvinceName (2.5.4.8) — S. Это значение отличается от имени ключа RFC 1779 X.500 (ST).
Кроме того, следующие имена ключей X.500 не упоминаются в RFC 1779, но могут быть возвращены этим API:
Ключ Строка идентификатора объекта
E 1.2.840.113549.1.9.1
T 2.5.4.12
G 2.5.4.42
Я 2.5.4.43
SN 2.5.4.4
 

Примеры

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

пример программы C. Преобразование имен из сертификатов в ASN.1 и обратно.

Заметка

Заголовок wincrypt.h определяет CertNameToStr как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2003 [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка wincrypt.h
библиотеки Crypt32.lib
DLL Crypt32.dll

См. также

CertRDNValueToStr

CertStrToName

Функции преобразования данных