使用 CTL 验证已签名的消息
使用 证书信任列表 (CTL) 的一个优点是,应用程序可以设计为针对受信任证书自动验证已签名的消息,而无需用对话框打扰用户。 它还使网络管理员控制源受信任。
以下过程可用于使用 CTL 验证已签名消息的签名。
使用 CTL 验证已签名邮件
按如下所示解码消息:
- 获取指向已编码 BLOB) (收到的消息的指针。
- 调用 CryptMsgOpenToDecode,传递必要的参数。
- 调用 CryptMsgUpdate 一次,传入步骤 b 中检索到的句柄和指向要解码的数据的指针。 这会导致对消息采取适当的操作,具体取决于消息类型。
验证已解码且已签名的消息的签名,并获取指向签名者 CERT_CONTEXT的指针。
为此,可以调用 CryptMsgGetAndVerifySigner,将步骤 1c 中检索到的消息句柄作为 hCryptMsg 参数传递。 如果函数调用返回 TRUE,则签名已验证,并在 ppSigner 参数中返回指向签名者PCCERT_CONTEXT的指针。
确认签名者是受信任的源,如下所示:
- 打开包含相应 CTL 的证书存储。
- 通过调用 CertFindCTLInStore 获取指向CTL_CONTEXT的指针。
- 若要确认签名者是受信任的源,请调用 CertFindSubjectInCTL,在 pCtlContext 参数中传递在上一步中检索的指针,在 dwSubjectType 参数中CTL_CERT_SUBJECT_TYPE,以及指向 pvSubject 参数中步骤 2 中检索到CERT_CONTEXT的指针。 如果函数调用返回 TRUE,则传递给函数 的CERT_CONTEXT 是 CTL 中受信任的源。