次の方法で共有


CertNameToStrW 関数 (wincrypt.h)

CertNameToStr 関数は、CERT_NAME_BLOB構造体のエンコードされた名前を null で終わる文字列に変換します。

文字列表現は、 RFC 1779 の識別名の仕様に従います。 この規則の例外は、以下の「備考」セクションに記載されています。

構文

DWORD CertNameToStrW(
  [in]  DWORD           dwCertEncodingType,
  [in]  PCERT_NAME_BLOB pName,
  [in]  DWORD           dwStrType,
  [out] LPWSTR          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
スペース ( + ) 区切り記号で囲まれたプラス記号を 1 つのスペース区切り記号に置き換えます。
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 文字を含む) を返します。

pszNULL または csz が 0 の場合は、変換先文字列の必要なサイズを返します。

解説

pszNULL でなく、csz が 0 でない場合、返される psz は常に null で終わる文字列です。

デコード時に順序の問題が発生する可能性を回避するために、マルチコンポーネント RNN (CN=James+O=Microsoft など) を使用することをお勧めします。 代わりに、単一値の RNN (CN=James、O=Microsoft など) の使用を検討してください。

文字列表現は、 RFC 1779 の識別名の仕様に従います。ただし、次の一覧で説明する逸脱を除きます。

  • 引用符を含む名前は、二重引用符で囲まれます。
  • 空の文字列は二重引用符で囲まれます。
  • 連続するスペースを含む文字列は、引用符で囲まれません。
  • CERT_RDN_ENCODED_BLOB型またはCERT_RDN_OCTET_STRING型の相対識別名 (RDN) 値は、16 進数で書式設定されます。
  • OID に対応する X.500 名がない場合は、OID の前に "OID" プレフィックスが使用されます。
  • RDN 値の先頭に空白、末尾の空白、または次のいずれかの文字が含まれている場合、RDN 値は二重引用符 ("\" ではなく) で囲まれます。
    • コンマ (,)
    • プラス記号 (+)
    • 等号 (=)
    • インチ マーク (")
    • 円記号 (/)
    • より小さい記号 (<)
    • より大きい記号 (>)
    • 番号記号 (#)
    • セミコロン (;)
  • stateOrProvinceName (2.5.4.8) OID の X.500 キー名は "S" です。 この値は、RFC 1779 X.500 キー名 ("ST") とは異なります。
さらに、次の X.500 キー名は RFC 1779 では言及されていませんが、この API によって返される可能性があります。
Key オブジェクト識別子の文字列
E 1.2.840.113549.1.9.1
T 2.5.4.12
G 2.5.4.42
I 2.5.4.43
SN 2.5.4.4
 

この関数を使用する例については、次を参照してください。

例 C プログラム: 証明書から ASN.1 および Back への名前の変換

注意

wincrypt.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして CertNameToStr を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Crypt32.lib
[DLL] Crypt32.dll

関連項目

CertRDNValueToStr

CertStrToName

データ変換関数