Partager via


Renégociation d’une connexion Schannel

Pour modifier les attributs d’une connexion, tels que la suite de chiffrement ou l’authentification du client, vous pouvez demander une « restauration » ou une renégociation de la connexion.

Si les attributs que vous souhaitez modifier sont contrôlés par des informations d’identification, vous devez obtenir de nouvelles informations d’identification avant de renégocier la connexion. Pour plus d’informations, consultez Obtention des informations d’identification Schannel.

Pour demander un rétablissement à partir d’une application cliente, appelez la fonction InitializeSecurityContext (Schannel). Les applications serveur appellent la fonction AcceptSecurityContext (Schannel). Définissez les paramètres de la façon suivante :

  • Spécifiez le contexte de sécurité existant dans le paramètre phContext .
  • (Clients uniquement) Spécifiez le même nom de serveur (dans le paramètre pszTargetName ) que celui spécifié lors de l’établissement du contexte.
  • Spécifiez de nouvelles informations d’identification à l’aide du paramètre phCredential , le cas échéant.
  • Si vous souhaitez modifier des attributs de contexte non liés aux informations d’identification, spécifiez ces attributs à l’aide du paramètre fContextReq .

Après avoir appelé la fonction appropriée, votre application doit envoyer les résultats au client et continuer à traiter les messages entrants à l’aide de la fonction DecryptMessage (Schannel).

La fonction DecryptMessage (Schannel) retourne SEC_I_RENEGOTIATE lorsque Schannel est prêt pour que votre application continue. Lorsque vous recevez le code de retour SEC_I_RENEGOTIATE, votre application doit appeler AcceptSecurityContext (Schannel) ( serveurs) ou InitializeSecurityContext (Schannel) (clients) et transmettre le contenu de SECBUFFER_EXTRA renvoyé par DecryptMessage dans le SECBUFFER_TOKEN. Une fois cet appel retourné une valeur, procédez comme si votre application créait une nouvelle connexion.