次の方法で共有


CertCreateSelfSignCertificate 関数 (wincrypt.h)

CertCreateSelfSignCertificate 関数は自己署名証明書をビルドし、証明書を表すCERT_CONTEXT構造体へのポインターを返します。

構文

PCCERT_CONTEXT CertCreateSelfSignCertificate(
  [in, optional] HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
  [in]           PCERT_NAME_BLOB                 pSubjectIssuerBlob,
  [in]           DWORD                           dwFlags,
  [in, optional] PCRYPT_KEY_PROV_INFO            pKeyProvInfo,
  [in, optional] PCRYPT_ALGORITHM_IDENTIFIER     pSignatureAlgorithm,
  [in, optional] PSYSTEMTIME                     pStartTime,
  [in, optional] PSYSTEMTIME                     pEndTime,
  [optional]     PCERT_EXTENSIONS                pExtensions
);

パラメーター

[in, optional] hCryptProvOrNCryptKey

作成された証明書の署名に使用される 暗号化プロバイダー のハンドル。 NULL の場合、pKeyProvInfo パラメーターからの情報を使用して、必要なハンドルが取得されます。 pKeyProvInfoNULL の場合、既定のプロバイダーの種類、プロバイダーの種類PROV_RSA_FULL、既定のキー仕様、AT_SIGNATURE、および一意のコンテナー名を持つ新しく作成されたキー コンテナーが使用されます。

このハンドルは、CryptAcquireContext 関数を使用して作成された HCRYPTPROV ハンドル、または NCryptOpenKey 関数を使用して作成されたNCRYPT_KEY_HANDLE ハンドルである必要があります。 新しいアプリケーションは、常に CNG 暗号化サービス プロバイダー (CSP) のNCRYPT_KEY_HANDLE ハンドルを渡す必要があります。

[in] pSubjectIssuerBlob

証明書のサブジェクトの識別名 (DN) を含む BLOB へのポインター。 このパラメーターを NULL にすることはできません。 最小限では、空の DN へのポインターを指定する必要があります。 この BLOB は通常、 CertStrToName 関数を使用して作成されます。 また、 CryptEncodeObject 関数を使用し、X509_NAMEまたは X509_UNICODE_NAME StructType を指定して作成することもできます。

[in] dwFlags

この関数の既定の動作をオーバーライドするフラグのセット。 これは、0 または次の値の 1 つ以上の組み合わせにすることができます。

説明
CERT_CREATE_SELFSIGN_NO_KEY_INFO
2
既定では、返されるPCCERT_CONTEXTは、CERT_KEY_PROV_INFO_PROP_IDを設定して 秘密キー を参照します。 CERT_KEY_PROV_INFO_PROP_IDを設定して、返されたPCCERT_CONTEXTが秘密キーを参照しないようにするには、CERT_CREATE_SELFSIGN_NO_KEY_INFOを指定します。
CERT_CREATE_SELFSIGN_NO_SIGN
1
既定では、作成される証明書は署名されます。 作成する証明書がダミー プレースホルダーのみの場合は、証明書に署名する必要がない可能性があります。 CERT_CREATE_SELFSIGN_NO_SIGNが指定されている場合、証明書の署名はスキップされます。

[in, optional] pKeyProvInfo

CRYPT_KEY_PROV_INFO構造体へのポインター。 証明書が作成される前に、CSP にキー プロバイダー、キー プロバイダーの種類、および キー コンテナー 名のクエリが実行されます。 クエリされた CSP でこれらのクエリがサポートされていない場合、関数は失敗します。 既定のプロバイダーでこれらのクエリがサポートされていない場合は、 pKeyProvInfo 値を指定する必要があります。 RSA BASE では、これらのクエリがサポートされています。

pKeyProvInfo パラメーターが NULL でない場合、対応する値は、生成された証明書のCERT_KEY_PROV_INFO_PROP_ID値に設定されます。 指定された構造体のすべてのパラメーターが正しく指定されていることを確認する必要があります。

[in, optional] pSignatureAlgorithm

CRYPT_ALGORITHM_IDENTIFIER構造体へのポインター。 NULL の場合、既定のアルゴリズム (SHA1RSA) が使用されます。

[in, optional] pStartTime

SYSTEMTIME 構造体へのポインター。 NULL の場合、システムの現在の時刻が既定で使用されます。

[in, optional] pEndTime

SYSTEMTIME 構造体へのポインター。 NULL の場合、pStartTime 値と 1 年が既定で使用されます。

[optional] pExtensions

CERT_EXTENSION構造体のCERT_EXTENSIONS配列へのポインター。 既定では、配列は空です。 必要に応じて、代替サブジェクト名をこれらの拡張機能の 1 つとして指定できます。

戻り値

関数が成功すると、作成された証明書を指す PCCERT_CONTEXT 変数が返されます。 関数が失敗した場合は、NULL が返されます。 拡張エラー情報については、 GetLastError を呼び出します。

解説

pEndTime は有効な日付である必要があり、ユーザーが指定しない場合は自動的に生成されるため、この API が閏の日に呼び出されたときに、補正するアプリ ロジックを伴わずに予期しないエラーが発生する可能性があります。 詳細については、「 閏年の準備」を参照してください。

要件

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

関連項目

CERT_EXTENSION

CERT_EXTENSIONS

CRYPT_ALGORITHM_IDENTIFIER

CertStrToName

CryptEncodeObject

GetLastError

PCCERT_CONTEXT

SYSTEMTIME