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


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

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

Синтаксис

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 не найден в расширении, использует поле "Имя субъекта" для OID электронной почты. Если найдено значение rfc822Name или OID электронной почты, используется строка. В противном случае возвращает пустую строку (возвращенное число символов равно 1). pvTypePara не используется и имеет значение NULL.
CERT_NAME_RDN_TYPE
2
Преобразует BLOB-объект имени субъекта путем вызова CertNameToStr. pvTypePara указывает на DWORD, содержащую dwStrType 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 не найден в расширении, выполните поиск в поле "Имя субъекта" для OID CN, "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").

Если идентификатор имени участника-участника-участника найден, декодирует BLOB-объект в виде 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 dwType, как определено ниже:
  • CERT_NAME_EMAIL_TYPE. Если часть имени узла адреса электронной почты содержит код Punycode, закодированный компонент IA5String, он преобразуется в эквивалент Юникода.
  • CERT_NAME_SIMPLE_DISPLAY_TYPE. Если имя субъекта szOID_RSA_emailAddr или rfc822Name из альтернативного имени субъекта возвращается из сертификата, а часть имени узла адреса электронной почты содержит код Punycode, закодированный компонент IA5String, он преобразуется в эквивалент Юникода.
  • CERT_NAME_DNS_TYPE. Если сертификат имеет альтернативное имя издателя, с выбором DNSName и частью имени узла адреса электронной почты содержит код Punycode, закодированный IA5String компонент, он преобразуется в эквивалент Юникода.
  • CERT_NAME_URL_TYPE: универсальный код ресурса (URI) декодируется и неопакован. Если имя узла сервера URI содержит код Punycode, закодированный компоненте IA5String, строка имени узла преобразуется в эквивалент Юникода.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Это значение не поддерживается.

[in] pvTypePara

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

[out] pszNameString

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

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

[in] cchNameString

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

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

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

Замечания

Заметка

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

Требования

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

См. также

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