次の方法で共有


証明書コンテキストのエンコードとデコード

CryptoAPI では、 証明書のエンコードとデコードがサポートされています。 CryptoAPI には、さまざまな方法でエンコードとデコードを可能にする関数と C 構造の広範で柔軟なシステムが含まれています。 CryptoAPI では、標準 の X.509 証明書構造と標準 の抽象構文表記 1 (ASN.1) エンコードがサポートされ、他のシステムとの相互運用性が提供されます。

エンコードされたデータの概要については、「エンコードされたデータ とデコードされたデータ」を参照してください。

証明書コンテキスト

証明書コンテキストCERT_CONTEXTは、エンコードされたメンバー、証明書ストアへのハンドル、元のエンコードされた証明書 BLOB へのポインター、および CERT_INFO C 構造体へのポインターを含む C 構造体です。

CERT_INFO構造は、証明書の中心です。 これには、直接の形式とエンコードされた形式で、証明書内のすべての基本情報が含まれています。 次の図は 、エンコード されたすべてのメンバーが網掛けとして表示されるCERT_INFO構造を示しています。

cert-info 構造体

IssuerUniqueID および SubjectUniqueID メンバーは、X.509 バージョン 2 の証明書実装の一部ですが、ほとんど使用しません。 バージョン 3 の証明書拡張機能は、これらのメンバーの機能を置き換えます。

エンコードされた (網掛けされた) メンバー IssuerSubject に含まれる情報が必要な場合は、それらのメンバーをデコードする必要があります。 これらのメンバーをデコードするには、 CryptDecodeObject を使用します。 次の図は、これらのメンバーの 1 つをデコードするプロセスを示しています。

cryptdecodeobject を使用したデコード

図の場合、 CryptDecodeObject 関数は、 CERT_NAME_INFO 構造体、 CERT_RDN 構造体の配列、 CERT_RDN_ATTR 構造体の対応する配列、および名前を含む文字列を作成します。 CERT_RDN_ATTR構造体のメンバーによって、文字列の内容が決まります。 たとえば、 pszObjId メンバーが 2.5.4.3 の場合、文字列には共通の名前が含まれます。 2.5.4.10 の場合、文字列にはorganization名が含まれます。 これらの オブジェクト識別子 (OID) の一覧については、「 CERT_RDN_ATTR」を参照してください。

dwValueType メンバーには、文字列の型に関する情報が含まれています。 CERT_RDN_PRINTABLE_STRINGの場合、値メンバーにはバイト幅の 0 で終わる文字列が含まれます。 CERT_RDN_UNICODE_STRINGの場合、文字列は二重幅 (単語サイズ) の文字列です。

証明書のエンコードとデコードの詳細なプロセスについては、「 CERT_INFO構造のエンコード 」および「CERT_INFO 構造体のデコード」を参照してください。