Compartilhar via


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

  1. Decodificar a mensagem da seguinte maneira:

    1. Obtenha um ponteiro para a mensagem recebida (o BLOB codificado).
    2. Chame CryptMsgOpenToDecode, passando os argumentos necessários.
    3. 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.
  2. 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 .

  3. Confirme se o signatário é uma fonte confiável da seguinte maneira:

    1. Abra o repositório de certificados que contém a CTL apropriada.
    2. Obtenha um ponteiro para o CTL_CONTEXT chamando CertFindCTLInStore.
    3. 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.