共用方式為


CertGetNameStringA 函式 (wincrypt.h)

CertGetNameString函式會從憑證CERT_CONTEXT結構取得主體或簽發者名稱,並將它轉換成以 Null結尾的字元字串。

語法

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
呼叫 CertNameToStr來轉換主體名稱 BLOB。 pvTypePara指向包含傳遞至CertNameToStr的 dwStrTypeDWORD。 如果 [主體名稱] 欄位是空的,而且憑證具有主體別名延伸模組,請使用 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」) 。

如果找到 UPN OID,請將 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
此旗標會根據dwType參數值,將IA5String字串解碼為 Unicode 字串值,如下所示:
  • CERT_NAME_EMAIL_TYPE:如果電子郵件地址的主機名稱部分包含 Punycode 編碼 的 IA5String 元件,則會轉換成 Unicode 對等專案。
  • CERT_NAME_SIMPLE_DISPLAY_TYPE:如果主體別名的主體名稱或來自主體別名 szOID_RSA_emailAddr的 rfc822Name 是從憑證傳回,而電子郵件地址的主機名稱部分包含 Punycode 編碼 的 IA5String 元件,則會轉換成 Unicode 對等專案。
  • CERT_NAME_DNS_TYPE:如果憑證具有簽發者別名,且具有 DNSName 選擇,且電子郵件地址的主機名稱部分包含 Punycode 編碼 的 IA5String 元件,則會轉換成 Unicode 對等專案。
  • CERT_NAME_URL_TYPE:URI 會解碼且未逸出。 如果 URI 的伺服器主機名稱包含 Punycode 編碼 的 IA5String 元件,主機名稱字串會轉換成 Unicode 對等專案。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支援此值。

[in] pvTypePara

包含dwStrTypeDWORD指標,或指定 name 屬性 (OID 的物件識別碼) 指標。 指向的類型取決於 dwType的值。

[out] pszNameString

要接收傳回字串之已配置緩衝區的指標。 如果 pszNameString 不是 NullcchNameString 不是零, pszNameStringNull終止的字串。

如果在dwFlags參數中指定CERT_NAME_SEARCH_ALL_NAMES_FLAG且CERT_NAME_DNS_TYPE是在dwType參數中設定,則傳回的字串會包含套用的所有 DNS 名稱。 輸出字串中的每個字串都是以 Null 結尾,最後一個字串將會是雙 Null 終止。 如果找不到 DNS 名稱,則會傳回單一以 Null 結尾的空字串。

[in] cchNameString

大小,以字元為單位,配置給傳回的字串。 大小必須包含終止 的 Null 字元。

傳回值

傳回已轉換的字元數,包括終止零字元。 如果 pszNameStringNullcchNameString 為零,則會傳回目的地字串的必要大小, (包括終止 Null 字元) 。 如果找不到指定的名稱類型,則傳回 以 Null結尾的空字串,且傳回的字元計數為 1。

備註

注意

wincrypt.h 標頭會將 CertGetNameString 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程式碼,可能會導致編譯或執行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 wincrypt.h
程式庫 Crypt32.lib
Dll Crypt32.dll

另請參閱

資料轉換函式