Compartilhar via


Criando um contexto de segurança do Schannel

Para estabelecer um contexto de segurança que proteja as comunicações entre um cliente e um servidor, ambos devem participar do seguinte processo de troca de informações:

Cliente

  1. O cliente chama a função InitializeSecurityContext (Geral).
  2. O Schannel começa a criar um contexto de segurança de acordo com as regras do protocolo de segurança selecionado. O código de retorno da função indica se o cliente deve chamar a função novamente. InitializeSecurityContext (Geral) pode retornar um token que representa o contexto.
  3. Se um token tiver sido retornado, o cliente o enviará ao servidor.
  4. Quando InitializeSecurityContext (Geral) retorna SEC_E_OK, o cliente é concluído. Se a função retornar SEC_I_CONTINUE_NEEDED, o cliente deverá aguardar até que o servidor envie um token. Quando o cliente tem o token do servidor, ele deve chamar a funçãoInitializeSecurityContext (Geral)novamente. (Retorne à etapa 2.)

Servidor

  1. O servidor aguarda que um cliente envie uma mensagem que contenha um token de segurança. O servidor passa o token recebido do cliente para a função AcceptSecurityContext (Geral).
  2. O Schannel baseia-se no contexto de segurança parcial representado pelo token. Schannel retorna um token para o servidor e um código de retorno que indica se o servidor deve chamar a função novamente.
  3. Se um token tiver sido retornado, o servidor o enviará ao cliente.
  4. Quando AcceptSecurityContext (Geral) retorna SEC_E_OK, o servidor é concluído. Se a função retornar SEC_I_CONTINUE_NEEDED, o servidor deverá aguardar até que o cliente envie um token. Quando o servidor tiver o token do cliente, ele deverá chamar a função AcceptSecurityContext (Geral) novamente. (Retorne à etapa 2.)

Se uma das funções retornar um valor diferente de SEC_E_OK, SEC_I_CONTINUE_NEEDED ou SEC_E_INCOMPLETE_MESSAGE (consulte o parágrafo a seguir), ocorrerá um erro. O cliente e o servidor devem chamar a função DeleteSecurityContext para excluir o contexto de segurança parcialmente estabelecido.

Um caso especial que pode alterar o processamento do cliente e do servidor é quando pouca ou muita informação é enviada para o cliente ou servidor de outra parte. No caso de pouca informação, ambas as funções retornam SEC_E_INCOMPLETE_MESSAGE. Para obter informações sobre como reconhecer e lidar com informações insuficientes ou em excesso, consulte Buffers extras retornados pelo Schannel.

Executando a autenticação usando schannel

Mapeamento de certificados

Validando manualmente as credenciais do Schannel