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 に渡される dwStrType を含む DWORD を指します。 [サブジェクト名] フィールドが空で、証明書にサブジェクトの別名拡張子がある場合は、 CertNameToStr から選択した最初のディレクトリ名を使用します。
CERT_NAME_ATTR_TYPE
3
pvTypePara は 、返される name 属性を指定する オブジェクト識別子 (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
証明書にサブジェクトの別名拡張子がある場合は、pszObjId == szOID_NT_PRINCIPAL_NAME ("1.3.6.1.4.1.311.20.2.3") を探して OtherName の選択肢を検索します。

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 が証明書から返され、電子メール アドレス a のホスト名部分に Punycode でエンコードされた IA5String コンポーネントが含まれている場合は、Unicode に相当する部分に変換されます。
  • CERT_NAME_DNS_TYPE: 証明書に発行者の別名があり、DNSName が選択されていて、電子メール アドレス a のホスト名部分に Punycode でエンコードされた IA5String コンポーネントが含まれている場合は、Unicode に相当するコンポーネントに変換されます。
  • CERT_NAME_URL_TYPE: URI はデコードされ、エスケープ解除されます。 URI のサーバー ホスト名に Punycode でエンコードされた IA5String コンポーネントが含まれている場合、ホスト名の文字列は Unicode に相当する文字列に変換されます。
Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: この値はサポートされていません。

[in] pvTypePara

dwStrType を含む DWORD または name 属性を指定するオブジェクト識別子 (OID) へのポインター。 指し示される型は、 dwType の値によって決まります。

[out] pszNameString

返された文字列を受け取る割り当てられたバッファーへのポインター。 pszNameStringNULL ではなく、cchNameString が 0 でない場合、pszNameStringnull で終わる文字列です。

CERT_NAME_SEARCH_ALL_NAMES_FLAGが dwFlags パラメーターで指定され、CERT_NAME_DNS_TYPEが dwType パラメーターに設定されている場合、返される文字列には、適用されるすべての DNS 名が含まれます。 出力文字列内の各文字列は null で終わるので、最後の文字列は 2 つの null で終わることになります。 DNS 名が見つからない場合は、null で終わる 1 つの空の文字列が返されます。

[in] cchNameString

返される文字列に割り当てられたサイズ (文字数)。 サイズには、終端の NULL 文字を含める必要があります。

戻り値

変換された文字数 (終端の 0 文字を含む) を返します。 pszNameStringNULL または cchNameString が 0 の場合は、変換先の文字列 (終端の NULL 文字を含む) の必要なサイズを返します。 指定した名前の型が見つからない場合は、返された文字数が 1 の null で終わる空の文字列を返します。

解説

注意

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

要件

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

関連項目

データ変換関数