使用 CTL 验证已签名的消息

使用 证书信任列表 (CTL) 的一个优点是,应用程序可以设计为针对受信任证书自动验证已签名的消息,而无需用对话框打扰用户。 它还使网络管理员控制源受信任。

以下过程可用于使用 CTL 验证已签名消息的签名。

使用 CTL 验证已签名邮件

  1. 按如下所示解码消息:

    1. 获取指向已编码 BLOB) (收到的消息的指针。
    2. 调用 CryptMsgOpenToDecode,传递必要的参数。
    3. 调用 CryptMsgUpdate 一次,传入步骤 b 中检索到的句柄和指向要解码的数据的指针。 这会导致对消息采取适当的操作,具体取决于消息类型。
  2. 验证已解码且已签名的消息的签名,并获取指向签名者 CERT_CONTEXT的指针。

    为此,可以调用 CryptMsgGetAndVerifySigner,将步骤 1c 中检索到的消息句柄作为 hCryptMsg 参数传递。 如果函数调用返回 TRUE,则签名已验证,并在 ppSigner 参数中返回指向签名者PCCERT_CONTEXT的指针。

  3. 确认签名者是受信任的源,如下所示:

    1. 打开包含相应 CTL 的证书存储。
    2. 通过调用 CertFindCTLInStore 获取指向CTL_CONTEXT的指针。
    3. 若要确认签名者是受信任的源,请调用 CertFindSubjectInCTL,在 pCtlContext 参数中传递在上一步中检索的指针,在 dwSubjectType 参数中CTL_CERT_SUBJECT_TYPE,以及指向 pvSubject 参数中步骤 2 中检索到CERT_CONTEXT的指针。 如果函数调用返回 TRUE,则传递给函数 的CERT_CONTEXT 是 CTL 中受信任的源。