A CertOpenStore funkcióinak kiterjesztése

A tanúsítványtároló minden tanúsítványkezelési művelet központi része. A CertOpenStore függvény funkciói egy telepíthető (vagy regisztrált) tanúsítványtároló-szolgáltatói függvény használatával bővíthetők. A CryptoAPI-val való használatra szolgáló függvények telepítésének vagy regisztrálásának áttekintéséért lásd OID áttekintése.

Jegyzet

Az egyéni tanúsítványtárolók automatikus üzembe helyezésekor a rendszer nem telepíti át automatikusan az egyéni tanúsítványtárolókat. Az egyéni tanúsítványtárolók áttelepítéséhez létre kell hoznia egy jegyzékfájlt az egyéni tárolók migrálásához, és a Windows felhasználói állapot áttelepítési eszközét (USMT) kell használnia.

 

CertOpenStore üres tárolót nyit meg a memóriában, és meghívja a tárolószolgáltatói függvényt (ha regisztrálva van vagy telepítve van) az lpszStoreProvider paraméterben átadott (OID) objektumazonosítóval. A CryptoAPI-hoz megadott előre definiált szolgáltatótípusok listájáért lásd CertOpenStore.

Az áruház szolgáltatói funkció átmásolja a tanúsítványait és a visszavonási listákat (CRL-eket) a memóriabeli tárolóba, amelyet a hCertStore fogantyú ad meg. Az új tárolószolgáltatói függvény a CryptoAPI-tanúsítványtároló bármely függvényét használhatja, például CertAddCertificateContextToStore vagy CertAddSerializedElementToStore, hogy a tanúsítványait és CRLs-eit a memóriában lévő tárolóba adja hozzá. Emellett a tárolószolgáltató függvény opcionálisan visszaadja az CERT_STORE_PROV_INFO struktúra összes adattagjának értékeit. A függvénynek csak akkor kell frissítenie ezt a struktúrát, ha támogatja a további visszahívási függvényeket. Ha például a tároló írásvédett lenne, valószínűleg nem lenne szükség más callback függvények támogatására. A lehetséges visszahívási függvények részleteiért és prototípusaiért lásd tanúsítványtároló szolgáltatói visszahívási függvényeit.

A felhasználónkénti TrustedPeople-tároló az előre meghatározott fizikai tárolókra korlátozódik. Felhasználónkénti TrustedPeople-tároló nem bővíthető. Azonban kiterjesztheti a helyi gép TrustedPeople tárolóját.

Windows XP és Windows Server 2003: A felhasználónkénti TrustedPeople áruház nem korlátozódik előre meghatározott fizikai tárolókra.

A CERT_STORE_PROV_INFO struktúra egyik adattagja az rgpvStoreProvFunc tömb. Ha az áruházszolgáltatói függvénynek támogatnia kell egy vagy több visszahívási függvényt, a tömbhöz mutatókat kell megadnia. Ezeknek a mutatóknak a visszahívási függvényekre kell mutatniuk, amelyeket más tanúsítványtárolói tevékenységekhez (például az áruház bezárásához) kell használni. Az alábbi ábrán a folyamat folyamata látható.

certopenstore funkció

Ahogy az alábbi ábrán látható, az áruház megnyitása után más CryptoAPI-függvények (például CertCloseStore) a mutatótömb használatával érik el a kívánt feladatot végrehajtó visszahívási függvényeket. A CERT_STORE_PROV_INFO struktúra definíciója és a CryptoAPI által biztosított alapértelmezett visszahívási függvények prototípusai a Tanúsítványtároló szolgáltatói visszahívási függvényekrészben vannak bemutatva.

certclosestore funkció

Az áruház API-jai lehetővé teszik a tárolószolgáltató számára a tanúsítványok, a CRL-ek és tanúsítványmegbízhatósági listák (CTL-ek) tárolását az áruház gyorsítótárán kívül (például a tanúsítványok külső adatbázisát, például a Microsoft Tanúsítványkiszolgáló-adatbázis által biztosítottakat).

CertOpenStore a megfelelő CertDllOpenStoreProv telepíthető szolgáltató függvényhez küldi el a pszStoreProvider paraméteren keresztül. A szolgáltató a pStoreProvInfo paraméterben adja vissza az adatokat, amelyek egy CERT_STORE_PROV_INFO struktúrára mutatnak. A CERT_STORE_PROV_INFO struktúra egy dwStoreProvFlags tagot tartalmaz. A CERT_STORE_PROV_EXTERNAL_FLAG jelző hozzá lett adva, hogy a szolgáltató jelezze, hogy a tanúsítványok, a CRL-ek és a CTL-ek kívül vannak az áruház gyorsítótárán.

CertDllOpenStoreProv visszahívási függvények tömbét adja vissza. A szolgáltató a következő visszahívási függvényeket implementálhatja:

  • 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

A WRITE_CERT, WRITE_CRL és WRITE_CTL visszahívási függvény hívásainál a CERT_STORE_PROV_WRITE_ADD_FLAG beállításakor a dwFlags paraméter felső 16 bitje tartalmazza a dwAddDisposition értéket. A külső tárolók támogatásához a szolgáltató a következő visszahívási függvényeket valósíthatja meg:

  • 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

A tanúsítványvisszahívási függvények a következő aláírásokkal rendelkeznek:

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
        );

A CRL- és CTL-visszahívási függvények aláírásai megegyeznek a fentivel, de a CERT_CONTEXT mutató CRL_CONTEXT vagy CTL_CONTEXTmutatóra van cserélve.

A FIND_CERT visszahívás akkor kerül meghívásra, amikor a tároló API-k tanúsítványokat sorolnak fel, keresnek, vagy adnak hozzá. pPrevCertContext és ppvStoreProvFindInfo beállítása NULL az új FIND kezdeményezéséhez. A visszaadott ppvStoreProvFindInfo a következő keresés során kerül visszaadásra, amely időpontban a szolgáltató felszabadíthatja. A szolgáltató a tanúsítvány összes tulajdonságát, némelyikét vagy egyikét sem állíthatja be. A szolgáltatónak lehetősége van elhalasztani a műveletet, amíg a GET_CERT_PROPERTY visszahívást meg nem hívják. Javasoljuk, hogy a szolgáltatók a lehető legtöbb tulajdonságot állítsa be, hogy lehetővé tegyék a másolást egy másik tárolóba.

A következő tanúsítványkeresési típusok támogatottak 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 (tárgy attribútum keresése)
  • CERT_FIND_ISSUER_NAME
  • CERT_FIND_ISSUER_ATTR
  • CERT_FIND_SUBJECT_STR_A
  • CERT_FIND_SUBJECT_STR_W
  • CERT_FIND_ISSUER_STR_A
  • CERT_FIND_ISSUER_STR_W
  • CERT_FIND_KEY_SPEC
  • CERT_FIND_ENHKEY_USAGE

A FIND_CERT visszahívás a fenti keresési típusok mindegyikére meghívható. A CertFindCertificateInStore átadott paramétereket a rendszer közvetlenül a CERT_STORE_PROV_FIND_INFO struktúrába másolja, mielőtt meghívná a FIND_CERT visszahívást. A CERT_STORE_PROV_FIND_INFO struktúra különböző keresési típusainak mezőértékeivel kapcsolatos részletekért lásd CertFindCertificateInStore.

A következő tanúsítványkeresési típusok támogatják a CertGetSubjectCertificateFromStore és CertGetIssuerCertificateFromStore API-kat, és segítenek megállapítani, hogy a tanúsítvány már létezik-e az áruházban a hozzáadás előtt:

  • TANÚSÍTVÁNY_KERESÉS_TÁRGY
  • TANÚSÍTVÁNY_KERES_KEZES_FELELӦSÉSÉT
  • CERT_FIND_EXISTING

A CERT_FIND_SUBJECT_CERT esetében a pvFindPara paraméter egy CERT_INFO struktúrára mutat, amely tartalmazza a tárgy kiállítóját és sorozatszámát. A CERT_FIND_ISSUER_OF esetében a pvFindPara a tárgyhoz tartozó CERT_CONTEXT struktúrára mutat. A CERT_FIND_EXISTING esetében a pvFindPara a tanúsítvány egy CERT_CONTEXT, amely ellenőrzi, hogy létezik-e az áruházban.

A FREE_FIND_CERT visszahívás akkor lesz meghívva, ha a FIND_CERT visszahívás által visszaadott tanúsítványt nem használták fel egy későbbi FIND_CERT-ben, így a hivatkozási száma nullára csökken, vagy ha a CertCloseStorehívása révén lett kiadva. A CLOSE visszahívás meghívása előtt az összes, a FIND_CERT visszahívás által visszaadott tanúsítványt vissza kell adni a szolgáltatónak úgy, hogy átadjuk őket a FIND_CERT vagy a FREE_FIND_CERT visszahívásnak. Ugyanez vonatkozik a CRL- és CTL-visszahívásokra is.

A GET_CERT_PROPERTY visszahívást CertGetCertificateContextProperty hívja meg, ha nem találja a pCertContext paraméter megadott tulajdonságát. Ugyanez igaz a GET_CRL_PROPERTY-re és a GET_CTL_PROPERTY-re.

A FIND_CRL visszahívást akkor hívja meg a rendszer, amikor a tároló API-k számba kérik vagy lekérik a CRL-eket, és mielőtt hozzáadnának egy CRL-t. A következő CRL-keresési típusok lesznek definiálva:

A CRL_FIND_ISSUED_BY esetén a pvFindPara a CRL-kiállító CERT_CONTEXT mutatója. A CRL_FIND_EXISTING esetében pvFindPara a CRL CRL_CONTEXT mutatója annak megállapításához, hogy az már létezik-e az áruházban.

A FIND_CTL visszahívás akkor kerül meghívásra, amikor a tároló API-k felsorolják vagy keresik a CTL-eket. A következő CTL-kereséstípusok támogatottak CertFindCTLInStore:

  • Bármelyik keresése
  • CTL_FIND_SHA1_HASH
  • CTL_FIND_MD5_HASH
  • CTL_HASZNÁLAT KERESÉSE
  • KERES_ELEMEK
  • RÉSZBEN LÉTEZŐ KERESÉSE

A FIND_CTL visszahívás a fenti keresési típusok mindegyikéhez le van hívva. A CertFindCTLInStore átadott paramétereket a rendszer közvetlenül a CERT_STORE_PROV_FIND_INFO struktúrába másolja, mielőtt meghívja a FIND_CTL visszahívást. A CERT_STORE_PROV_FIND_INFO struktúra különböző keresési típusainak mezőértékeivel kapcsolatos részletekért lásd CertFindCTLInStore.

A CTL_FIND_EXISTING CTL-keresés típusa segít megállapítani, hogy a CTL már létezik-e az áruházban a CTL hozzáadása előtt.

A CTL_FIND_EXISTING esetében pvFindPara a CTL CTL_CONTEXT szerkezetére mutató mutató, amely megállapítja, hogy már létezik-e az áruházban.