Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
úložiště certifikátů je centrální pro všechny operace správy certifikátů. Funkce funkce CertOpenStore lze rozšířit pomocí instalovatelné (nebo registrované) funkce zprostředkovatele úložiště certifikátů. Přehled instalace nebo registrace funkcí pro použití s CryptoAPI najdete v tématu OID Overview.
Poznámka
Při provádění automatizovaných nasazení se vlastní úložiště certifikátů nemigrují automaticky. Pokud chcete migrovat vlastní úložiště certifikátů, musíte vytvořit manifest pro migraci vlastních úložišť a použít nástroj pro migraci stavu uživatele systému Windows (USMT).
CertOpenStore otevře prázdné úložiště v paměti a zavolá funkci zprostředkovatele úložiště (pokud je zaregistrovaná nebo nainstalovaná) pomocí identifikátoru objektu (OID), který byl předán v lpszStoreProvider parametru. Seznam předdefinovaných typů zprostředkovatelů, které jsou dodávány s CryptoAPI, naleznete v tématu CertOpenStore.
Funkce zprostředkovatele úložiště zkopíruje své certifikáty a seznamy odvolání certifikátů (CRLs) do úložiště v paměti určeného popisovačem hCertStore. Nová funkce zprostředkovatele úložiště může využít kteroukoliv z funkcí úložiště certifikátů CryptoAPI, jako například CertAddCertificateContextToStore nebo CertAddSerializedElementToStore, aby přidala své certifikáty a seznamy CRL do úložiště v paměti. Kromě toho funkce zprostředkovatele úložiště volitelně vrací hodnoty pro všechny datové členy CERT_STORE_PROV_INFO struktury. Tato funkce musí tuto strukturu aktualizovat pouze v případě, že podporuje další funkce zpětného volání. Pokud by například úložiště mělo být úložištěm jen pro čtení, podpora dalších funkcí zpětného volání pravděpodobně nebude nutná. Podrobnosti a prototypy možných funkcí zpětného volání najdete v tématu Funkce zpětného volání zprostředkovatele úložiště certifikátů.
Úložiště TrustedPeople pro jednotlivé uživatele je omezeno na předdefinované fyzické úložiště. Úložiště TrustedPeople pro jednotlivé uživatele nelze rozšířit. Úložiště TrustedPeople místního počítače však můžete rozšířit.
Windows XP a Windows Server 2003: Úložiště TrustedPeople pro jednotlivé uživatele není omezeno na předdefinované fyzické úložiště.
Jedním z datových členů struktury CERT_STORE_PROV_INFO je pole rgpvStoreProvFunc. Pokud funkce zprostředkovatele úložiště potřebuje podporovat jednu nebo více funkcí zpětného volání, musí poskytnout ukazatele pro toto pole. Tyto ukazatele musí odkazovat na funkce zpětného volání, které se mají použít pro jiné aktivity úložiště certifikátů (například uzavření úložiště). Následující obrázek znázorňuje tok tohoto procesu.
Jak je znázorněno na následujícím obrázku, po otevření úložiště používají další funkce CryptoAPI (například CertCloseStore) pole ukazatelů pro přístup k funkcím zpětného volání, které provádějí zamýšlenou úlohu. Definice struktury CERT_STORE_PROV_INFO a prototypy výchozích funkcí zpětného volání, které jsou dodávány s CryptoAPI, jsou uvedeny v funkce zpětného volání poskytovatele úložiště certifikátů.
Rozhraní API úložiště umožňují poskytovateli úložiště udržovat certifikáty, seznamy CRL a seznamů důvěryhodnosti certifikátů (CTL) mimo mezipaměť úložiště (například externí databázi certifikátů, jako je například databáze serveru microsoft Certificate Server).
CertOpenStore odesílá požadavek prostřednictvím parametru pszStoreProvider na příslušnou instalovatelnou funkci zprostředkovatele CertDllOpenStoreProv. Zprostředkovatel vrátí informace v parametru pStoreProvInfo odkazující na strukturu CERT_STORE_PROV_INFO. Struktura CERT_STORE_PROV_INFO obsahuje člena dwStoreProvFlags. Byl přidán příznak CERT_STORE_PROV_EXTERNAL_FLAG, který poskytovateli umožní indikovat, že certifikáty, seznamy CRL a seznamy CTL jsou externí do mezipaměti úložiště.
CertDllOpenStoreProv vrátí pole funkcí zpětného volání. Zprostředkovatel může implementovat následující funkce zpětného volání:
- CERT_STORE_PROV_CLOSE_FUNC
- CERT_STORE_PROV_READ_CERT_FUNC
- CERT_STORE_PROV_WRITE_CERT_FUNC
- CERT_STORE_PROV_DELETE_CERT_FUNC
- CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC
- CERT_STORE_PROV_READ_CRL_FUNC
- CERT_STORE_PROV_WRITE_CRL_FUNC
- CERT_STORE_PROV_DELETE_CRL_FUNC
- CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC
- CERT_STORE_PROV_READ_CTL_FUNC
- CERT_STORE_PROV_WRITE_CTL_FUNC
- CERT_STORE_PROV_DELETE_CTL_FUNC
- CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC
Při volání funkcí zpětného volání WRITE_CERT, WRITE_CRL a WRITE_CTL, je-li nastaven příznak CERT_STORE_PROV_WRITE_ADD_FLAG, obsahuje horních 16 bitů parametru dwFlags hodnotu dwAddDisposition. Aby bylo možné podporovat externí úložiště, může poskytovatel implementovat následující funkce zpětného volání:
- CERT_STORE_PROV_FIND_CERT_FUNC
- CERT_STORE_PROV_FREE_FIND_CERT_FUNC
- CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC
- CERT_STORE_PROV_FIND_CRL_FUNC
- CERT_STORE_PROV_FREE_FIND_CRL_FUNC
- CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC
- CERT_STORE_PROV_FIND_CTL_FUNC
- CERT_STORE_PROV_FREE_FIND_CTL_FUNC
- CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC
Funkce zpětného volání certifikátu mají následující podpisy:
typedef struct _CERT_STORE_PROV_FIND_INFO {
DWORD cbSize;
DWORD dwMsgAndCertEncodingType;
DWORD dwFindFlags;
DWORD dwFindType;
const void *pvFindPara;
} CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO;
typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,
*PCCERT_STORE_PROV_FIND_INFO;
typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(
IN HCERTSTOREPROV hStoreProv,
IN PCCERT_STORE_PROV_FIND_INFO pFindInfo,
IN PCCERT_CONTEXT pPrevCertContext,
IN DWORD dwFlags,
IN OUT void **ppvStoreProvFindInfo,
OUT PCCERT_CONTEXT *ppProvCertContext
);
typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(
IN HCERTSTOREPROV hStoreProv,
IN PCCERT_CONTEXT pCertContext,
IN void *pvStoreProvFindInfo,
IN DWORD dwFlags
);
typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(
IN HCERTSTOREPROV hStoreProv,
IN PCCERT_CONTEXT pCertContext,
IN DWORD dwPropId,
IN DWORD dwFlags,
OUT void *pvData,
IN OUT DWORD *pcbData
);
Podpisy funkcí CRL a CTL pro zpětné volání jsou stejné jako výše, s nahrazením ukazatele na CERT_CONTEXT ukazatelem na CRL_CONTEXT nebo CTL_CONTEXT.
Zpětné volání FIND_CERT je vyvoláno, když API store vypíše, vyhledá nebo přidá certifikáty. pPrevCertContext a ppvStoreProvFindInfo jsou nastaveny na null, aby se iniciovala nová funkce FIND. Vrácená ppvStoreProvFindInfo se předá zpět při dalším vyhledávání, kdy může být uvolněna poskytovatelem. Zprostředkovatel může nastavit všechny vlastnosti certifikátu, některé nebo žádné vlastnosti certifikátu. Poskytovatel má možnost odložit na dobu, než bude zavoláno zpětné volání GET_CERT_PROPERTY. Doporučujeme poskytovatelům nastavit co nejvíce vlastností, aby bylo možné kopírovat do jiného úložiště.
Následující typy hledání certifikátů jsou podporovány v CertFindCertificateInStore:
- CERT_FIND_ANY
- CERT_FIND_SHA1_HASH
- CERT_FIND_MD5_HASH
- CERT_FIND_PROPERTY
- CERT_FIND_PUBLIC_KEY
- CERT_FIND_SUBJECT_NAME
- CERT_FIND_SUBJECT_ATTR
- CERT_FIND_ISSUER_NAME
- CERT_FIND_ISSUER_ATTR (najít atribut vydavatele certifikátu)
- CERT_FIND_SUBJECT_STR_A
- CERT_FIND_SUBJECT_STR_W
- CERT_FIND_ISSUER_STR_A
- CERT_FIND_ISSUER_STR_W
- CERTIFIKÁT_NALEZEN_KLÍČ_SPEC
- CERT_FIND_ENHKEY_USAGE
Pro každý z výše uvedených typů hledání se volá callback FIND_CERT. Parametry předané CertFindCertificateInStore se zkopírují přímo do struktury CERT_STORE_PROV_FIND_INFO před voláním zpětného volání FIND_CERT. Podrobnosti o hodnotách polí pro různé typy hledání struktury CERT_STORE_PROV_FIND_INFO naleznete v tématu CertFindCertificateInStore.
Následující typy hledání certifikátů podporují rozhraní API CertGetSubjectCertificateFromStore a CertGetIssuerCertificateFromStore a pomáhají určit, jestli certifikát už existuje v úložišti před jeho přidáním:
- CERT_FIND_SUBJECT_CERT
- CERT_FIND_ISSUER_OF
- CERTIFIKÁT_NAJÍT_EXISTUJÍCÍ
Pro CERT_FIND_SUBJECT_CERT odkazuje parametr pvFindPara na strukturu CERT_INFO, která obsahuje Vystavitel a SerialNumber předmětu. Pro CERT_FIND_ISSUER_OF pvFindPara odkazuje na strukturu CERT_CONTEXT předmětu. Pro CERT_FIND_EXISTING pvFindPara odkazuje na CERT_CONTEXT certifikátu, aby se ověřila jeho existence v úložišti.
Zpětné volání FREE_FIND_CERT je aktivováno, pokud certifikát vrácený zpětným voláním FIND_CERT nebyl zrušen, protože byl použit v následném volání FIND_CERT, čímž klesl jeho počet odkazů na nulu, nebo uvolněný voláním CertCloseStore. Před voláním zpětného volání CLOSE by měly být všechny certifikáty vrácené zpětným voláním FIND_CERT uvolněny zprostředkovateli předáním volání do zpětného volání FIND_CERT nebo voláním zpětného volání FREE_FIND_CERT. Totéž platí pro zpětná volání CRL a CTL.
Volání zpětné funkce GET_CERT_PROPERTY je provedeno funkcí CertGetCertificateContextProperty, pokud nemůže najít zadanou vlastnost pro parametr pCertContext. Totéž platí pro GET_CRL_PROPERTY a GET_CTL_PROPERTY.
Zpětné volání FIND_CRL se volá, když rozhraní API úložiště zobrazuje nebo získá CRL a před přidáním CRL. Budou definovány následující typy vyhledávání CRL:
Pro CRL_FIND_ISSUED_BY pvFindPara je ukazatel na CERT_CONTEXT vydavatele CRL. Pro CRL_FIND_EXISTING je pvFindPara ukazatelem na CRL_CONTEXT CRL, aby se určilo, zda již existuje v úložišti.
Zpětné volání FIND_CTL se vyvolá, když rozhraní API úložiště vyhledávají nebo vyčíslují seznamy CTL. Následující typy hledání CTL se podporují v CertFindCTLInStore:
- CTL_FIND_ANY
- CTL_FIND_SHA1_HASH
- CTL_FIND_MD5_HASH
- CTL_FIND_USAGE
- CTL_FIND_SUBJECT
- NAJÍT_EXISTUJÍCÍ
Pro každý z výše uvedených typů hledání se volá zpětné volání FIND_CTL. Parametry předané CertFindCTLInStore se přenesou přímo do struktury CERT_STORE_PROV_FIND_INFO před vyvoláním callback funkce FIND_CTL. Podrobnosti o hodnotách polí pro různé typy hledání struktury CERT_STORE_PROV_FIND_INFO naleznete v tématu CertFindCTLInStore.
Typ vyhledávání CTL CTL_FIND_EXISTING pomáhá určit, jestli CTL již v úložišti existuje, než provedete přidání CTL.
Pro CTL_FIND_EXISTING je pvFindPara ukazatel na strukturu CTL_CONTEXT pro určení, zda již existuje v úložišti.