次の方法で共有


CryptRetrieveObjectByUrlW 関数 (wincrypt.h)

CryptRetrieveObjectByUrl 関数は、URL で指定された場所から公開キー 基盤 (PKI) オブジェクトを取得します。

これらのリモート オブジェクトはエンコードされた形式で、"コンテキスト" 形式で取得されます。

構文

BOOL CryptRetrieveObjectByUrlW(
  [in]           LPCWSTR                  pszUrl,
  [in]           LPCSTR                   pszObjectOid,
  [in]           DWORD                    dwRetrievalFlags,
  [in]           DWORD                    dwTimeout,
  [out]          LPVOID                   *ppvObject,
  [in]           HCRYPTASYNC              hAsyncRetrieve,
  [in, optional] PCRYPT_CREDENTIALS       pCredentials,
  [in, optional] LPVOID                   pvVerify,
  [in]           PCRYPT_RETRIEVE_AUX_INFO pAuxInfo
);

パラメーター

[in] pszUrl

取得する PKI オブジェクトのアドレス。 次のスキームがサポートされています。

  • ldap ( ライトウェイト ディレクトリ アクセス プロトコル)
  • http
  • https (証明書失効リスト (CRL) またはオンライン証明書状態プロトコル (OCSP) 取得のみ )
  • ファイル

[in] pszObjectOid

取得するオブジェクトの種類を識別する null で終わる ANSI 文字列のアドレス。 次のいずれかの値を指定できます。

価値 意味
NULL
ブロッブ
BLOB1 つ以上のデータを取得します。 エンコードされたビットは BLOB の配列で返されます。 ppvObject は、BLOB 配列を受け取る CRYPT_BLOB_ARRAY 構造体ポインターのアドレスです。 この構造体が不要になったら、この構造体のアドレスを CryptMemFree 関数に渡して解放する必要があります。
CONTEXT_OID_CERTIFICATE
証書
1 つ以上の証明書を取得します。

単一のオブジェクトが取得されている場合、ppvObject は、コンテキストを受け取る CERT_CONTEXT 構造体ポインターのアドレスです。 このコンテキストが不要になったら、CertFreeCertificateContext 関数に CERT_CONTEXT 構造体ポインターを渡して解放する必要があります。

複数のオブジェクトが取得されている場合、ppvObject は、証明書を含むストアのハンドルを受け取る HCERTSTORE 変数のアドレスです。 このストアが不要になったら、このハンドルを CertCloseStore 関数に渡して閉じる必要があります。

CONTEXT_OID_CRL
CRL
1 つ以上の 証明書失効リスト (CRL) を取得します。

1 つのオブジェクトを取得する場合、ppvObject は、コンテキストを受け取る CRL_CONTEXT 構造体ポインターのアドレスです。 このコンテキストが不要になったら、CRL_CONTEXT 構造体ポインターを CertFreeCRLContext 関数に渡して解放する必要があります。

複数のオブジェクトが取得されている場合、ppvObject は、CRL を含むストアのハンドルを受け取る HCERTSTORE 変数のアドレスです。 このストアが不要になったら、このハンドルを CertCloseStore 関数に渡して閉じる必要があります。

CONTEXT_OID_CTL
CTL
1 つ以上の 証明書信頼リスト (CCTL) を取得します。

単一のオブジェクトが取得されている場合、ppvObject は、コンテキストを受け取る CTL_CONTEXT 構造体ポインターのアドレスです。 このコンテキストが不要になったら、CertFreeCTLContext 関数に CTL_CONTEXT 構造体ポインターを渡して解放する必要があります。

複数のオブジェクトが取得されている場合、ppvObject は、CCTL を含むストアのハンドルを受け取る HCERTSTORE 変数のアドレスです。 このストアが不要になったら、このハンドルを CertCloseStore 関数に渡して閉じる必要があります。

CONTEXT_OID_PKCS7
PKCS7
ppvObject は、メッセージからオブジェクトを含むストアのハンドルを受け取る HCERTSTORE 変数のアドレスです。 このストアが不要になったら、このハンドルを CertCloseStore 関数に渡して閉じる必要があります。
CONTEXT_OID_CAPI2_ANY
関数は適切な項目を決定します
ppvObject は、オブジェクトを含むストアのハンドルを受け取る HCERTSTORE 変数のアドレスです。 このストアが不要になったら、このハンドルを CertCloseStore 関数に渡して閉じる必要があります。
CONTEXT_OID_OCSP_RESP
OCSP 応答
ppvObject は、CRYPT_BLOB_ARRAY 構造体へのポインターのアドレスです。

[in] dwRetrievalFlags

キャッシュされた URL を使用するか、ワイヤ URL から取得した URL を使用するかを決定します。 オブジェクトが返されるフォームは、pszObjectOid値によって決まります。

価値 意味
CRYPT_AIA_RETRIEVAL
URL をキャッシュに書き込む前に、ワイヤ URL によって取得されたコンテンツを検証します。

既定のプロバイダーは、AIA 取得用の HTTPS プロトコルをサポートしていません。

CRYPT_ASYNC_RETRIEVAL
この値はサポートされていません。
CRYPT_CACHE_ONLY_RETRIEVAL
URL キャッシュからのみエンコードされたビットを取得します。 ワイヤを使用して URL を取得しないでください。
CRYPT_DONT_CACHE_RESULT
取得したエンコードされたビットを URL キャッシュに格納しません。 このフラグが設定されていない場合は、取得した URL がキャッシュされます。
CRYPT_HTTP_POST_RETRIEVAL
HTTP 取得に既定の GET メソッドの代わりに POST メソッドを使用します。

POST URL では、追加のバイナリ データとヘッダー文字列がベース URL に次の形式で追加されます。

BaseURLOptionalURLEscaped&Base64EncodedAdditionalData?OptionalAdditionalHTTPHeaders の

次の例は、最後のスラッシュ (/) で区切られた追加のバイナリ データと、ベース URL に追加された疑問符 (?) で区切られた Content-Type ヘッダーを示しています。

http://ocsp.openvalidation.org/MEIwQDA%2BMDwwOjAJBgUrDgMCGgUABBQdKNEwjytjKBQADcgM61jfflNpyQQUv1NDgnjQnsOA5RtnygUA37lIg6UCAQI%3D?Content-Type: application/ocsp-request

このフラグを設定すると、CryptRetrieveObjectByUrl 関数は、最後のスラッシュ (/) 区切り記号と疑問符 (?) 区切り記号を使用して URL を解析します。 スラッシュ (/) で区切られた文字列には、エスケープされていない URL (つまり、エスケープ文字やエスケープ シーケンスのないプレーン テキスト URL) と、WinHttpSendRequestlpOptional パラメーターとして関数に渡される前にバイナリ形式でデコードされた Base64 データが含まれます。 疑問符 (?) で区切られた文字列は、pwszHeaders パラメーターとして、WinHttpSendRequest 関数に渡されます。

CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL
指定されたホスト文字列に対して A レコードのみの DNS 参照を実行し、ホスト名を解決するときに偽の DNS クエリが生成されないようにします。 このフラグは、ドメイン名ではなくホスト名を渡すときに使用する必要があります。
CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE
各 LDAP オブジェクトのエントリ インデックスと属性名を取得します。 返される各 BLOB の先頭には、次の ANSI 文字列が含まれています。

"エントリ インデックス (10 進\0属性名\0"

このフラグが設定されている場合、BLOB が返されるように pszObjectOid NULL する必要があります。 このフラグは ldap スキームにのみ適用されます。

CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL
LDAP 検索スコープが URL のベースに設定されていない場合、失敗します。 LDAP でのみ使用します。
CRYPT_LDAP_SIGN_RETRIEVAL
Kerberos 認証プロトコルを使用して、サーバーとの間のすべての LDAP トラフィックにデジタル署名します。 この機能は、一部のアプリケーションで必要な整合性を提供します。
CRYPT_NO_AUTH_RETRIEVAL
自動認証処理を禁止します。
CRYPT_NOT_MODIFIED_RETRIEVAL
条件付き HTTP URL の取得を有効にします。 このフラグが設定されている場合、HTTP_STATUS_NOT_MODIFIEDを返す条件付き取得では、CryptRetrieveObjectByUrl は TRUE 返し、ppvObject は NULLに設定されます。 pAuxInfo が NULLされていない場合、dwHttpStatusCode HTTP_STATUS_NOT_MODIFIEDに設定されます。 それ以外の場合は、ppvObject が更新され、正常に取得されます。
CRYPT_OFFLINE_CHECK_RETRIEVAL
後続の取得時にネットワークにヒットする前に、オフラインの障害と遅延を追跡します。 この値は、ワイヤ取得専用です。
CRYPT_PROXY_CACHE_RETRIEVAL
オブジェクトのプロキシ キャッシュ取得を有効にします。 プロキシ キャッシュが明示的にバイパスされていない場合、fProxyCacheRetrieval は、pAuxInfoで TRUE 設定されます。 この値は、HTTP URL の取得にのみ適用されます。
CRYPT_RETRIEVE_MULTIPLE_OBJECTS
使用可能な場合は、複数のオブジェクトを取得します。 オブジェクト 識別子 (OID) の値がCONTEXT_OID_CAPI2_ANYされていない限り、すべてのオブジェクト pszObjectOidの値によって決定される同種のオブジェクト型である必要があります。
CRYPT_STICKY_CACHE_RETRIEVAL
URL にキャッシュからのフラッシュの除外としてタグを付けます。 詳細については、INTERNET_CACHE_ENTRY_INFOのSTICKY_CACHE_ENTRYを参照してください。
CRYPT_VERIFY_CONTEXT_SIGNATURE
作成されたコンテキストで署名の検証を取得します。 この場合 pszObjectOid は、以外の NULL で、pvVerify 署名者証明書コンテキストを指している必要があります。
CRYPT_VERIFY_DATA_HASH
このフラグは実装されていません。 使用しないでください。
CRYPT_WIRE_ONLY_RETRIEVAL
ワイヤからのみエンコードされたビットを取得します。 URL キャッシュを使用しません。

[in] dwTimeout

取得を待機する最大ミリ秒数を指定します。 値が 0 の場合、この関数はタイムアウトしません。URL スキームが file:/// されている場合、このパラメーターは使用されません。

[out] ppvObject

返されるオブジェクトへのポインターのアドレス。 戻り値の型は、pszObjectOidに示されているサポートされている型のいずれかです。

[in] hAsyncRetrieve

このパラメーターは予約されており、NULL設定する必要があります。

[in, optional] pCredentials

このパラメーターは使用されません。

[in, optional] pvVerify

検証オブジェクトへのポインター。 このオブジェクトは、dwRetrievalFlags パラメーターの関数です。 dwRetrievalFlags がCRYPT_VERIFY_CONTEXT_SIGNATUREされている場合、呼び出し元が署名者の証明書コンテキストまたはインデックスの取得に関心を持たないことを示すには、null できます。

[in] pAuxInfo

CRYPT_RETRIEVE_AUX_INFO 構造体への省略可能なポインター。 NULL しない場合、および構造体の cbSize メンバーが設定されている場合、このパラメーターは最後に正常にネットワーク取得が成功した時刻を返します。

戻り値

関数が成功した場合、戻り値は 0 以外 (true)。

関数が失敗した場合、戻り値は 0 (FALSE)。

備考

リモート オブジェクト取得マネージャーは、2 つのプロバイダー モデルを公開します。 1 つは、URL スキーム (ldap、http、ftp、またはファイル) で定義されているインストール可能なプロトコル プロバイダーを許可するスキーム プロバイダー モデルです。 スキーム プロバイダーのエントリ ポイントは、CryptRetrieveObjectByUrl 関数と同じです。ただし、返される *ppvObject は常に、エンコードされたビット (取得されたオブジェクトごとに 1 つ) のカウントされた配列です。

2 番目のプロバイダー モデルは、取得したエンコードされたビットに基づいてコンテキスト ハンドル (オブジェクト) のインストール可能な作成者を許可するコンテキスト プロバイダー モデルです。 これらは、CryptRetrieveObjectByUrlの呼び出しで指定された オブジェクト識別子 (OID) に基づいてディスパッチされます。

証明書、信頼リスト、失効リスト、PKCS #7 メッセージ、複数の同種オブジェクトなどの個々の PKI オブジェクトを取得できます。 Windows Vista Service Pack 1 (SP1) および Windows Server 2008 以降では、"http:" と "ldap:" の取得のセキュリティが強化されました。

この関数は、"http:" と "ldap:" の URL スキームと、新しく定義されたスキームをサポートします。

Windows XP: "ftp:" は、ネットワーク取得ではサポートされていません。

既定では、"file:" はネットワーク取得ではサポートされていません。
 

手記

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

必要条件

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

関連項目

CryptGetObjectUrl