Validando manualmente as credenciais do Schannel

Por padrão, o Schannel valida o certificado do servidor chamando a função WinVerifyTrust ; no entanto, se você tiver desabilitado esse recurso usando o sinalizador ISC_REQ_MANUAL_CRED_VALIDATION, deverá validar o certificado fornecido pelo servidor que está tentando estabelecer sua identidade.

Para validar manualmente o certificado do servidor, primeiro você deve obtê-lo. Use a função QueryContextAttributes (Geral) e especifique o valor do atributo SECPKG_ATTR_REMOTE_CERT_CONTEXT. Esse atributo retorna uma estrutura CERT_CONTEXT com a cadeia de certificados fornecida pelo servidor. Essa cadeia de certificados contém o certificado folha. Ele é chamado de certificado folha porque é o último certificado na cadeia de certificados e está mais distante do certificado raiz. A ordenação de certificados no buffer de contexto SSPI não implica nenhuma relação de encadeamento de certificados.

Usando o certificado folha, você deve verificar o seguinte:

  • A cadeia de certificados está concluída e a raiz é um certificado de uma AC (autoridade de certificação ) confiável.
  • A hora atual não está além das datas de início e término de cada um dos certificados na cadeia de certificados.
  • Nenhum dos certificados na cadeia de certificados foi revogado.
  • A profundidade do certificado folha não é mais profunda do que a profundidade máxima permitida especificada na extensão do certificado. Esse marcar só será necessário se houver uma profundidade especificada.
  • O uso do certificado está correto, por exemplo, um certificado de cliente não deve ser usado para autenticar um servidor.
  • Para autenticação de servidor, a identidade do servidor contida no certificado folha do servidor corresponde ao servidor que o cliente está tentando contatar. Normalmente, o cliente corresponderá algum item no campo Nome da Entidade do certificado ao endereço IP ou ao nome DNS do servidor.