Поделиться через


Проверка подписанных сообщений с помощью списков ctls

Одним из преимуществ использования списков доверия сертификатов (CTLS) является то, что приложения можно разрабатывать, которые могут автоматически проверять подписанные сообщения в отношении доверенных сертификатов, не беспокоясь пользователя с помощью диалоговых окон. Кроме того, он предоставляет сетевому администратору возможность контроля над доверенными источниками.

Следующая процедура может использоваться для проверки подписи подписанного сообщения с помощью CTL.

Чтобы проверить подписанное сообщение с помощью CTL

  1. Декодировать сообщение следующим образом:

    1. Получите указатель на полученное сообщение (закодированное BLOB).
    2. Вызов CryptMsgOpenToDecode, передав необходимые аргументы.
    3. Вызовите CryptMsgUpdate один раз, передав дескриптор, полученный на шаге b, и указатель на данные, которые необходимо декодировать. Это приводит к тому, что соответствующие действия будут выполнены по отношению к сообщению в зависимости от типа сообщения.
  2. Проверьте подпись декодированного, подписанного сообщения и получите указатель на CERT_CONTEXT подписавшего.

    Это можно сделать, вызвав CryptMsgGetAndVerifySigner, передав дескриптор сообщения, полученный на шаге 1c в качестве параметра hCryptMsg. Если вызов функции возвращает TRUE, подпись проверена, и указатель на PCCERT_CONTEXT подписавшего возвращается в параметре ppSigner.

  3. Убедитесь, что подписыватель является доверенным источником следующим образом:

    1. Откройте хранилище сертификатов, содержащее соответствующий CTL.
    2. Получите указатель на CTL_CONTEXT путем вызова CertFindCTLInStore.
    3. Чтобы убедиться, что подписыватель является доверенным источником, вызовите CertFindSubjectInCTL, передав указатель, полученный на предыдущем шаге в параметре pCtlContext, CTL_CERT_SUBJECT_TYPE в параметре dwSubjectType, а также указатель на CERT_CONTEXT, полученный на шаге 2 в параметре pvSubject. Если вызов функции возвращает TRUE, CERT_CONTEXT, переданный функции, является доверенным источником в CTL.