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 參數中的資訊來取得所需的控制碼。 如果 pKeyProvInfo 也是 Null,則會使用預設提供者類型、PROV_RSA_FULL提供者類型、預設金鑰規格、AT_SIGNATURE,以及具有唯一容器名稱新建立的 金鑰容器

此控制碼必須是使用CryptAcquireCoNtext函式所建立的HCRYPTPROV控制碼,或是使用NCryptOpenKey函式所建立的NCRYPT_KEY_HANDLE控制碼。 新的應用程式應該一律傳入 CNG密碼編譯服務提供者的NCRYPT_KEY_HANDLE控制碼, (CSP) 。

[in] pSubjectIssuerBlob

BLOB的指標,其中包含憑證主體的辨別名稱 (DN) 。 此參數不可為 Null。 基本上,必須提供空 DN 的指標。 此 BLOB 通常是使用 CertStrToName 函式所建立。 您也可以使用 CryptEncodeObject 函式來建立它,並指定X509_NAME或X509_UNICODE_NAME StructType

[in] dwFlags

一組旗標,可覆寫此函式的預設行為。 這可以是零或下列一或多個值的組合。

意義
CERT_CREATE_SELFSIGN_NO_KEY_INFO
2
根據預設,傳回的PCCERT_CONTEXT會藉由設定CERT_KEY_PROV_INFO_PROP_ID來參考 私密金鑰 。 如果您不想讓傳回PCCERT_CONTEXT藉由設定CERT_KEY_PROV_INFO_PROP_ID來參考私密金鑰,請指定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 值加上一年。

[optional] pExtensions

CERT_EXTENSION結構的CERT_EXTENSIONS陣列指標。 根據預設,陣列是空的。 如有需要,可以將替代主體名稱指定為下列其中一個延伸模組。

傳回值

如果函式成功,則會傳回指向所建立憑證 的PCCERT_CONTEXT 變數。 如果函式失敗,則會傳回 Null。 如需擴充的錯誤資訊,請呼叫 GetLastError

備註

由於 pEndTime 必須是有效的日期,而且如果使用者未提供,則會自動產生,因此當此 API 在閏天呼叫時,可能會輕易地產生非預期的失敗,而不需要隨附應用程式邏輯來補償。 如需詳細資訊,請參閱 閏年整備

規格需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 wincrypt.h
程式庫 Crypt32.lib
Dll Crypt32.dll

另請參閱

CERT_EXTENSION

CERT_EXTENSIONS

CRYPT_ALGORITHM_IDENTIFIER

CertStrToName

CryptEncodeObject

GetLastError

PCCERT_CONTEXT

SYSTEMTIME