Udostępnij przez


Weryfikowanie podpisanych komunikatów przy użyciu list CTL

Jedną z zalet używania list zaufania certyfikatów (CTLs) jest to, że aplikacje mogą być tak projektowane, aby automatycznie weryfikowały podpisane komunikaty względem zaufanych certyfikatów, nie przeszkadzając użytkownikowi poprzez okna dialogowe. Zapewnia również zaufane źródła kontroli administratora sieci.

Poniższa procedura może służyć do weryfikowania podpisu podpisanej wiadomości przy użyciu listy CTL.

Aby zweryfikować podpisaną wiadomość za pomocą CTL

  1. Zdekoduj komunikat w następujący sposób:

    1. Pobierz wskaźnik do odebranego komunikatu (zakodowany BLOB).
    2. Wywołaj CryptMsgOpenToDecode, przekazując niezbędne argumenty.
    3. Wywołaj CryptMsgUpdate raz, przekazując dojście pobrane w kroku b i wskaźnik do danych, które mają zostać zdekodowane. Powoduje to wykonanie odpowiednich akcji dla komunikatu w zależności od typu komunikatu.
  2. Sprawdź podpis dekodowanego, podpisanego komunikatu i pobierz wskaźnik do CERT_CONTEXTobiektu podpisywającego .

    Można to zrobić, wywołując funkcję CryptMsgGetAndVerifySigner, przekazując uchwyt komunikatu uzyskany w kroku 1c jako parametr hCryptMsg. Jeśli wywołanie funkcji zwraca TRUE, podpis został zweryfikowany, a wskaźnik do PCCERT_CONTEXT osoby podpisującej jest zwracany w parametrze ppSigner.

  3. Upewnij się, że podpisujący jest zaufanym źródłem w następujący sposób:

    1. Otwórz magazyn certyfikatów zawierający odpowiednią bibliotekę CTL.
    2. Pobierz wskaźnik do CTL_CONTEXT, wywołując CertFindCTLInStore.
    3. Aby potwierdzić, że podpisujący jest zaufanym źródłem, wywołaj CertFindSubjectInCTL, przekazując wskaźnik uzyskany w poprzednim kroku w parametrze pCtlContext, wartość CTL_CERT_SUBJECT_TYPE w parametrze dwSubjectType oraz wskaźnik do CERT_CONTEXT uzyskany w kroku 2 w parametrze pvSubject. Jeśli wywołanie funkcji zwraca true, CERT_CONTEXT przekazana do funkcji jest zaufanym źródłem w bibliotece CTL.