Verificando mensagens assinadas usando CTLs
Uma das vantagens de usar CTLs ( listas de confiança de certificado ) é que os aplicativos podem ser projetados para verificar automaticamente mensagens assinadas em relação a certificados confiáveis sem incomodar o usuário com caixas de diálogo. Ele também fornece a um administrador de rede fontes de controle para serem confiáveis.
O procedimento a seguir pode ser usado para verificar a assinatura de uma mensagem assinada usando uma CTL.
Para verificar uma mensagem assinada usando uma CTL
Decodificar a mensagem da seguinte maneira:
- Obtenha um ponteiro para a mensagem recebida (o BLOB codificado).
- Chame CryptMsgOpenToDecode, passando os argumentos necessários.
- Chame CryptMsgUpdate uma vez, passando o identificador recuperado na etapa b e um ponteiro para os dados que devem ser decodificados. Isso faz com que as ações apropriadas sejam executadas na mensagem, dependendo do tipo de mensagem.
Verifique a assinatura da mensagem assinada decodificada e obtenha um ponteiro para o CERT_CONTEXT do signatário.
Isso pode ser feito chamando CryptMsgGetAndVerifySigner, passando o identificador de mensagem recuperado na etapa 1c como o parâmetro hCryptMsg . Se a chamada de função retornar TRUE, a assinatura foi verificada e um ponteiro para o PCCERT_CONTEXT do signatário será retornado no parâmetro ppSigner .
Confirme se o signatário é uma fonte confiável da seguinte maneira:
- Abra o repositório de certificados que contém a CTL apropriada.
- Obtenha um ponteiro para o CTL_CONTEXT chamando CertFindCTLInStore.
- Para confirmar se o signatário é uma fonte confiável, chame CertFindSubjectInCTL, passando o ponteiro recuperado na etapa anterior no parâmetro pCtlContext , CTL_CERT_SUBJECT_TYPE no parâmetro dwSubjectType e o ponteiro para o CERT_CONTEXT recuperado na etapa 2 no parâmetro pvSubject . Se a chamada de função retornar TRUE, o CERT_CONTEXT passado para a função será uma fonte confiável na CTL.