Rinegoziazione di una connessione Schannel

Per modificare gli attributi di una connessione, ad esempio la suite di crittografia o l'autenticazione client, è possibile richiedere un "rollforward" o una rinegoziazione della connessione.

Se gli attributi da modificare sono controllati dalle credenziali, è necessario ottenere nuove credenziali prima di rinegoziare la connessione. Per altre informazioni, vedere Recupero delle credenziali Schannel.

Per richiedere un rollforward da un'applicazione client, chiamare la funzione InitializeSecurityContext (Schannel). Le applicazioni server chiamano la funzione AcceptSecurityContext (Schannel). Impostare i parametri come segue:

  • Specificare il contesto di sicurezza esistente nel parametro phContext .
  • (solo client) Specificare lo stesso nome del server (nel parametro pszTargetName ) specificato durante la definizione del contesto.
  • Specificare le nuove credenziali usando il parametro phCredential , se applicabile.
  • Se si desidera modificare gli attributi di contesto non correlati alle credenziali, specificare questi attributi usando il parametro fContextReq .

Dopo aver chiamato la funzione appropriata, l'applicazione deve inviare i risultati al client e continuare a elaborare i messaggi in arrivo usando la funzione DecryptMessage (Schannel).

La funzione DecryptMessage (Schannel) restituirà SEC_I_RENEGOTIATE quando Schannel è pronto per l'esecuzione dell'applicazione. Quando si riceve il codice restituito SEC_I_RENEGOTIATE, l'applicazione deve chiamare AcceptSecurityContext (server) (server) o InitializeSecurityContext (Schannel) (client) e passare il contenuto di SECBUFFER_EXTRA restituito da DecryptMessage nel SECBUFFER_TOKEN. Dopo che questa chiamata restituisce un valore, procedere come se l'applicazione creasse una nuova connessione.