Compartilhar via


Renegociar uma conexão Schannel

Para alterar os atributos de uma conexão, como o conjunto de criptografia ou a autenticação do cliente, você pode solicitar uma "refazer" ou renegociar a conexão.

Se os atributos que você deseja alterar forem controlados por credenciais, você deverá obter novas credenciais antes de renegociar a conexão. Para obter mais informações, consulte Obtendo credenciais do Schannel.

Para solicitar uma restauração de um aplicativo cliente, chame a função InitializeSecurityContext (Schannel). Aplicativos de servidor chamam a função AcceptSecurityContext (Schannel). Defina os parâmetros da seguinte maneira:

  • Especifique o contexto de segurança existente no parâmetro phContext .
  • (Somente clientes) Especifique o mesmo nome do servidor (no parâmetro pszTargetName ), conforme especificado ao estabelecer o contexto.
  • Especifique novas credenciais, usando o parâmetro phCredential , se aplicável.
  • Se você quiser alterar atributos de contexto não relacionados às credenciais, especifique esses atributos usando o parâmetro fContextReq .

Depois de chamar a função apropriada, seu aplicativo deve enviar os resultados para o cliente e continuar processando mensagens de entrada usando a função DecryptMessage (Schannel).

A função DecryptMessage (Schannel) retornará SEC_I_RENEGOTIATE quando o Schannel estiver pronto para que seu aplicativo continue. Quando você recebe o código de retorno SEC_I_RENEGOTIATE, seu aplicativo deve chamar AcceptSecurityContext (Schannel) (servidores) ou InitializeSecurityContext (Schannel) (clientes) e passar o conteúdo de SECBUFFER_EXTRA retornado de DecryptMessage no SECBUFFER_TOKEN. Depois que essa chamada retornar um valor, continue como se seu aplicativo estivesse criando uma nova conexão.