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
- O cliente chama a função InitializeSecurityContext (Geral).
- 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.
- Se um token tiver sido retornado, o cliente o enviará ao servidor.
- 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
- 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).
- 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.
- Se um token tiver sido retornado, o servidor o enviará ao cliente.
- 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.
Tópicos relacionados