CertGetIssuerCertificateFromStore 函式 (wincrypt.h)

CertGetIssuerCertificateFromStore函式會從證書存儲擷取指定主體憑證的第一個或下一個簽發者的憑證內容。 建議使用新的 憑證鏈結驗證函 式,而不是使用此函式。

語法

PCCERT_CONTEXT CertGetIssuerCertificateFromStore(
  [in]           HCERTSTORE     hCertStore,
  [in]           PCCERT_CONTEXT pSubjectContext,
  [in, optional] PCCERT_CONTEXT pPrevIssuerContext,
  [in, out]      DWORD          *pdwFlags
);

參數

[in] hCertStore

憑證存放區的控制碼。

[in] pSubjectContext

包含主旨資訊的 CERT_CONTEXT 結構的指標。 這個參數可以從任何憑證存放區取得,或使用 CertCreateCertificateCoNtext 函式呼叫應用程式建立。

[in, optional] pPrevIssuerContext

包含簽發者資訊的 CERT_CONTEXT 結構的指標。 簽發者可以有多個憑證,特別是當有效期間即將變更時。 這個參數在呼叫時必須是 Null ,才能取得第一個簽發者憑證。 若要取得簽發者的下一個憑證,請將 pPrevIssuerCoNtext 設定為上一個呼叫所傳回 的 CERT_CONTEXT 結構。

此函式會釋放此參數的非Null值所參考的CERT_CONTEXT

[in, out] pdwFlags

下列旗標會在傳回的憑證上啟用驗證檢查。 它們可以使用位OR 作業來合併,以啟用多個驗證。

意義
CERT_STORE_NO_CRL_FLAG
指出找不到相符的 CRL。
CERT_STORE_NO_ISSUER_FLAG
表示找不到簽發者憑證。
CERT_STORE_REVOCATION_FLAG
檢查主體憑證是否在簽發者的撤銷清單中。
CERT_STORE_SIGNATURE_FLAG
使用簽發者憑證中的公開金鑰來驗證主體憑證上的簽章。
CERT_STORE_TIME_VALIDITY_FLAG
取得目前的時間,並確認它是否在主體憑證的有效期間內。
 

如果啟用類型的驗證檢查成功,其旗標會設定為零。 如果失敗,其旗標會在傳回時保持設定。 針對CERT_STORE_REVOCATION_FLAG,如果函式找不到與主體憑證相關的 CRL,驗證就會成功。

如果已設定CERT_STORE_REVOCATION_FLAG,且簽發者在存放區中沒有 CRL,則會設定CERT_STORE_NO_CRL_FLAG並CERT_STORE_REVOCATION_FLAG保持設定。

如果已設定CERT_STORE_SIGNATURE_FLAG或CERT_STORE_REVOCATION_FLAG,如果函式在存放區中找不到簽發者憑證,就會設定CERT_STORE_NO_ISSUER_FLAG。 如需詳細資訊,請參閱備註。

在驗證檢查失敗的情況下,仍會傳回簽發者 CERT_CONTEXT 的指標,而且 不會更新 GetLastError

傳回值

如果函式成功,則傳回值是唯讀簽發 者CERT_CONTEXT的指標。

如果函式失敗,且找不到第一個或下一個簽發者憑證,則傳回值為 Null

呼叫CertFreeCertificateCoNtext,必須釋放最後傳回CERT_CONTEXT結構。 當從對函式的一個呼叫傳回 CERT_CONTEXT 提供為後續呼叫上的 pPrevIssuerCoNtext 參數時,內容會釋出為函式動作的一部分。

如需擴充錯誤資訊,請呼叫 GetLastError。 以下是一些可能的錯誤碼。

傳回碼 描述
CRYPT_E_NOT_FOUND
找不到主體憑證的簽發者。
CRYPT_E_SELF_SIGNED
簽發者憑證與主體憑證相同。 這是自我簽署 根憑證
E_INVALIDARG
hCertStore參數中的控制碼與pPrevIssuerCoNtext參數所指向之憑證內容的控制碼不同,或在pdwFlags中設定不支援的旗標。

備註

在後續呼叫函式時,會釋放傳回的指標作為 pPrevIssuerCoNtext 參數。 否則,必須藉由呼叫 CertFreeCertificateCoNtext明確釋放指標。 CertGetIssuerCertificateFromStore一律會使用對 CertFreeCertificateCoNtext的呼叫來釋放非NullpPrevIssuerCoNtext,即使函式中有錯誤也一樣。

您可以呼叫 CertDuplicateCertificateCoNtext 來建立簽發者憑證的複本。

dwFlags 的十六進位值可以使用位OR運算來合併,以啟用多個驗證。 例如,若要同時啟用簽章和時間有效性,輸入上的 dwFlags 中會傳遞值0x00000003。 在此情況下,如果CERT_STORE_SIGNATURE_FLAG驗證成功,但CERT_STORE_TIME_VALIDITY_FLAG驗證失敗, dwFlags 會在 輸出時傳回為0x00000002。

規格需求

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

另請參閱

憑證函數