共用方式為


CertNameToStrA 函式 (wincrypt.h)

CertNameToStr 函式會將 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、Kim Abercrombie + Programmer。
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
根據預設,CERT_RDN_T61_STRING X.500 金鑰字串會譯碼為 UTF8。 如果UTF8譯碼失敗,X.500機碼會譯碼為8位字元。 使用CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG略過將初始嘗試譯碼為UTF8。
CERT_NAME_STR_ENABLE_PUNYCODE_FLAG
0x00200000
如果 pName 參數所指向的名稱包含電子郵件 RDN,且電子郵件位址的主機名部分包含以 Punycode 編碼 IA5String,則會將名稱轉換成 Unicode 對等專案。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:不支援此值。

[out] psz

接收傳回字串之字元緩衝區的指標。 這個緩衝區的大小是在 csz 參數中指定。

[in] csz

psz 緩衝區的大小,以字元為單位。 大小必須包含終止的 Null 字元。

傳回值

傳回已轉換的字元數,包括終止的 Null 字元。

如果 pszNULLcsz 為零,則會傳回目的地字串所需的大小。

言論

如果 psz不是 NULL,且 csz 不是零,則傳回的 psz psz 一律為 null 終止字符串。

建議您不要使用多元件 RDN(例如 CN=James+O=Microsoft),以避免譯碼發生時可能發生的順序問題。 相反地,請考慮使用單一值 RDN(例如 CN=James、O=Microsoft)。

字串表示會遵循 RFC 1779 RFC 1779 中的辨別名稱規格,但下列清單所述的偏差除外。

  • 包含引號的名稱會以雙引號括住。
  • 空字串會以雙引號括住。
  • 包含連續空格的字串不會以引號括住。
  • CERT_RDN_ENCODED_BLOBCERT_RDN_OCTET_STRING 類型的相對辨別名稱 (RDN) 值會以十六進位格式格式化。
  • 如果 OID 沒有對應的 X.500 名稱,則會在 OID 之前使用 「OID」 前置詞。
  • 如果 RDN 值包含前置空格符、尾端空格符或下列其中一個字元,則 RDN 值會以雙引弧括住(而不是 “\” :
    • 逗號 (,)
    • 加號 (+)
    • 等號 (=)
    • 英吋標記 (“)
    • 反斜杠 (/)
    • 小於符號 (<)
    • 大於符號 (>)
    • 數字符號 (#)
    • 分號 (;)
  • stateOrProvinceName (2.5.4.8) OID 的 X.500 機碼名稱為 “S”。 此值與 RFC 1779 X.500 機碼名稱(“ST”) 不同。
此外,RFC 1779 中不會提及下列 X.500 金鑰名稱,但可能由此 API 傳回:
鑰匙 物件識別符字串
E 1.2.840.113549.1.9.1
T 2.5.4.12
G 2.5.4.42
2.5.4.43
2.5.4.4
 

例子

如需使用此函式的範例,請參閱

範例 C 程式:將名稱從憑證轉換成 ASN.1 和返回

注意

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

要求

要求 價值
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
支援的最低伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平臺 窗戶
標頭 wincrypt.h
連結庫 Crypt32.lib
DLL Crypt32.dll

另請參閱

CertRDNValueToStr

CertStrToName

資料轉換函式