Функция 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 этого значения, игнорируется этой функцией.
Этот параметр может быть следующим заданным в настоящее время типом кодирования сертификатов.
Ценность | Значение |
---|---|
|
Задает кодировку сертификата 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 используется с префиксом OID.
Значение RDN цитируется, если он содержит начальный или конечный пробел или один из следующих символов:
|
Следующие параметры также можно объединить со значением выше, чтобы указать дополнительные параметры строки.
Ценность | Значение |
---|---|
|
Замените запятую, за которой следует разделитель пробела (,) точкой с запятой, за которой следует разделитель пробела (; ). |
|
Замените запятую, за которой следует пробел (, ) разделитель обратной косой чертой, за которой следует буква r, за которой следует обратная косая черта, за которой следует разделитель буквы n (\r\n). |
|
Замените знак плюса, заключенный в разделитель пробелов (+) одним разделителем пробелов. |
|
Отключите кавычение. |
|
Порядок RDN в строке различаемого имени будет отменен после декодирования. Этот флаг по умолчанию не задан. |
|
По умолчанию строка ключа X.500 CERT_RDN_T61_STRING декодируется как UTF8. Если декодирование UTF8 завершается ошибкой, ключ X.500 декодируется как 8-разрядный символ. Используйте CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG, чтобы пропустить начальную попытку декодировать как UTF8. |
|
Если имя, на которое указывает параметр 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).
Ключ | Строка идентификатора объекта |
---|---|
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 |