次の方法で共有


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 値に先頭または末尾の空白が含まれている場合、または次のいずれかの文字が含まれている場合、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 が含まれており、電子メール アドレスのホスト名の部分に IA5Stringエンコードされた Punycode が含まれている場合、名前は Unicode と同等の名前に変換されます。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: この値はサポートされていません。

[out] psz

返された文字列を受け取る文字バッファーへのポインター。 このバッファーのサイズは、csz パラメーターで指定します。

[in] csz

psz バッファーのサイズ (文字数)。 サイズには、終端の null 文字を含める必要があります。

戻り値

変換された文字数 (終端の null 文字を含む) を返します。

psz NULL 、または csz が 0 場合は、コピー先の文字列の必要なサイズを返します。

備考

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

デコード時に発生する可能性のある順序付けの問題を回避するために、マルチコンポーネント RDN (CN=James+O=Microsoft など) を使用しないことをお勧めします。 代わりに、単一値の RDN (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 によって返される可能性があります。
オブジェクト識別子の文字列
E 1.2.840.113549.1.9.1
T 2.5.4.12
G 2.5.4.42
2.5.4.43
SN 2.5.4.4
 

この関数を使用する例については、

例 C プログラム: 名前を証明書から ASN.1 に変換し、に戻す。

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリ |UWP アプリ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリ |UWP アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー wincrypt.h
ライブラリ Crypt32.lib
DLL Crypt32.dll

関連項目

CertRDNValueToStr

CertStrToName

データ変換関数