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
一組旗標,可覆寫此函式的預設行為。 這可以是零或下列一或多個值的組合。
值 | 意義 |
---|---|
|
根據預設,傳回的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,則會略過憑證的簽署。 |
[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 |