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

Функция CertGetNameString получает имя субъекта или издателя из структуры сертификата CERT_CONTEXT и преобразует его в символьную строку с пустым завершением.

Синтаксис

DWORD CertGetNameStringA(
  [in]  PCCERT_CONTEXT pCertContext,
  [in]  DWORD          dwType,
  [in]  DWORD          dwFlags,
  [in]  void           *pvTypePara,
  [out] LPSTR          pszNameString,
  [in]  DWORD          cchNameString
);

Параметры

[in] pCertContext

Указатель на CERT_CONTEXT контекст сертификата, который включает в себя имя субъекта и издателя для преобразования.

[in] dwType

DWORD , указывающий, как нужно найти имя и как форматировать выходные данные.

Значение Значение
CERT_NAME_EMAIL_TYPE
1
Если у сертификата есть расширение альтернативного имени субъекта или альтернативное имя издателя, используется первый вариант rfc822Name. Если параметр rfc822Name не найден в расширении, использует поле Имя субъекта для Email OID. При обнаружении rfc822Name или Email OID использует строку . В противном случае возвращает пустую строку (возвращенное число символов равно 1). pvTypePara не используется и имеет значение NULL.
CERT_NAME_RDN_TYPE
2
Преобразует BLOB-объект имени субъекта путем вызова CertNameToStr. pvTypePara указывает на DWORD , содержащий dwStrType , переданный в CertNameToStr. Если поле Имя субъекта пусто и сертификат имеет расширение Альтернативное имя субъекта, использует первый выбор имени каталога из CertNameToStr.
CERT_NAME_ATTR_TYPE
3
pvTypePara указывает на идентификатор объекта (OID), указывающий возвращаемый атрибут имени. Например, если pvTypePara имеет значение szOID_COMMON_NAME, использует элемент Имя субъекта. Если элемент "Имя субъекта" пуст, а сертификат имеет расширение "Альтернативное имя субъекта", использует первый вариант directoryName.
CERT_NAME_SIMPLE_DISPLAY_TYPE
4
Выполняет итерацию по следующему списку атрибутов имени и использует имя субъекта или расширение альтернативного имени субъекта для первого вхождения: szOID_COMMON_NAME, szOID_ORGANIZATIONAL_UNIT_NAME, szOID_ORGANIZATION_NAME или szOID_RSA_emailAddr.

Если один из этих атрибутов не найден, использует расширение альтернативного имени субъекта для выбора rfc822Name. Если совпадение по-прежнему отсутствует, использует первый атрибут .

pvTypePara не используется и имеет значение NULL.

CERT_NAME_FRIENDLY_DISPLAY_TYPE
5
Проверяет сертификат на наличие свойства CERT_FRIENDLY_NAME_PROP_ID. Если сертификат имеет это свойство, он возвращается. Если у сертификата нет свойства , возвращается CERT_NAME_SIMPLE_DISPLAY_TYPE.
CERT_NAME_DNS_TYPE
6
Если сертификат имеет расширение альтернативного имени субъекта для издателя, альтернативное имя издателя, выполните поиск по первому выбору DNSName.

Если параметр DNSName не найден в расширении, выполните поиск в поле Имя субъекта для cn OID "2.5.4.3".

Если dnsName или CN OID найден, возвращается строка. В противном случае верните пустую строку.

CERT_NAME_URL_TYPE
7
Если сертификат имеет расширение альтернативного имени субъекта для издателя, альтернативное имя издателя, выполните поиск по первому URL-адресу. Если выбран url-адрес, верните строку. В противном случае верните пустую строку.
CERT_NAME_UPN_TYPE
8
Если сертификат имеет расширение "Альтернативное имя субъекта", выполните поиск в вариантах OtherName в поисках pszObjId == szOID_NT_PRINCIPAL_NAME, ("1.3.6.1.4.1.311.20.2.3").

Если идентификатор имени участника-пользователя найден, декодировать большой двоичный объект как X509_UNICODE_ANY_STRING и вернуть декодированную строку. В противном случае верните пустую строку.

[in] dwFlags

Указывает тип необходимой обработки.

Значение Значение
CERT_NAME_ISSUER_FLAG
0x1
Получает имя издателя. Если значение не задано, получает имя субъекта.
CERT_NAME_DISABLE_IE4_UTF8_FLAG
0x00010000
Пропускает начальную попытку по умолчанию декодировать значение как UTF8 и декодирует как 8-разрядные символы.
CERT_NAME_SEARCH_ALL_NAMES_FLAG
0x2
Если параметру dwType присвоено значение CERT_NAME_DNS_TYPE, возвращаются все применимые имена для указанного значения DNS. Если DNS-имя отсутствует, но в теме есть компонент CN, вместо этого возвращается cn. Если есть CN и DNS-имя, возвращаются только DNS-имена. Это имитирует политику построения цепочки SSL. Если этот флаг задан для типа имени, отличного от CERT_NAME_DNS_TYPE, эта функция возвращает пустую строку, завершаемую null.

Windows 8 и Windows Server 2012: Начнется поддержка этого флага.

CERT_NAME_STR_ENABLE_PUNYCODE_FLAG
0x00200000
Этот флаг позволяет декодировать строки IA5String в строковые значения Юникода на основе значения параметра dwType , как определено ниже:
  • CERT_NAME_EMAIL_TYPE. Если часть имени узла адреса электронной почты содержит компонент IA5String в кодировке Punycode, он преобразуется в эквивалент Юникода.
  • CERT_NAME_SIMPLE_DISPLAY_TYPE. Если из сертификата возвращается имя субъекта szOID_RSA_emailAddr или rfc822Name из альтернативного имени субъекта, а часть имени узла адреса электронной почты содержит компонент IA5String в кодировке Punycode, он преобразуется в эквивалент Юникода.
  • CERT_NAME_DNS_TYPE. Если сертификат имеет альтернативное имя издателя с выбором DNSName, а часть имени узла адреса электронной почты содержит компонент IA5String в кодировке Punycode, он преобразуется в эквивалент Юникода.
  • CERT_NAME_URL_TYPE. Универсальный код ресурса (URI) декодируется и неэкранируется. Если имя узла сервера URI содержит компонент IA5String в кодировке Punycode, строка имени узла преобразуется в эквивалент Юникода.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение не поддерживается.

[in] pvTypePara

Указатель на DWORD , содержащий dwStrType , или идентификатор объекта (OID), указывающий атрибут name. Тип, на который указывает , определяется значением dwType.

[out] pszNameString

Указатель на выделенный буфер для получения возвращаемой строки. Если pszNameString не имеет значение NULL , а cchNameString не равно нулю, pszNameString является строкой, заканчивающейся null.

Если CERT_NAME_SEARCH_ALL_NAMES_FLAG указан в параметре dwFlags , а CERT_NAME_DNS_TYPE задано в параметре dwType , возвращаемая строка будет содержать все применимые DNS-имена. Каждая строка в выходной строке заканчивается null, а последняя строка будет иметь двойное значение NULL. Если DNS-имена не найдены, возвращается одна пустая строка, оканченная null.

[in] cchNameString

Размер в символах, выделенный для возвращаемой строки. Размер должен включать завершающий символ NULL .

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

Возвращает количество преобразованных символов, включая завершающий нулевой символ. Если pszNameString имеет значение NULL или cchNameString равно нулю, возвращает требуемый размер строки назначения (включая завершающий символ NULL ). Если указанный тип имени не найден, возвращает пустую строку, завершаемую null, с возвращенным числом символов 1.

Комментарии

Примечание

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

Требования

   
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

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