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


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

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

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

Проверка подписанного сообщения с помощью CTL

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

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

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

  3. Убедитесь, что подписыватель является надежным источником, как показано ниже.

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