Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les informations doivent être envoyées entre le client et le serveur alors qu’un contexte de sécurité est établi et, par la suite, car les messages sécurisés sont échangés à l’aide des fonctionnalités de chiffrement et de déchiffrement fournies par Schannel. Les fonctions suivantes sont utilisées pour accomplir ces tâches :
- AcceptSecurityContext (Général)
- InitializeSecurityContext (Général)
- DecryptMessage (Général)
Schannel a un ensemble bien défini de comportements pour des informations incomplètes ou excédentaires incluses dans les mémoires tampons d’entrée de ces fonctions. Les informations sont échangées entre le client et le serveur de la manière suivante :
- La partie locale interagit avec Schannel en appelant une fonction SSPI et en transmettant des informations. En règle générale, les informations ont été reçues du tiers distant.
- La fonction retourne un code d’état et des mémoires tampons de sortie contenant des informations.
- Selon le code d’état, les mémoires tampons de sortie sont envoyées au tiers distant par le biais d’un mécanisme de communication.
- Le tiers distant lit les informations envoyées par la partie locale.
- La boucle se répète, avec les parties locales et distantes échangées. (Le tiers distant appelle une fonction SSPI et passe les informations lues à l’étape précédente.)
Tout fonctionne comme prévu lorsque la mémoire tampon d’entrée de la fonction SSPI contient exactement les informations nécessaires. Toutefois, en raison de la nature orientée flux de certains protocoles de communication, cela peut ne pas être le cas ; un bloc d’informations reçus d’un tiers distant peut contenir moins de données que celles requises ou supérieures à celles qui peuvent être traitées par Schannel dans un seul appel de fonction.
Si la mémoire tampon d’entrée contient trop peu d’informations, les fonctions retournent SEC_E_INCOMPLETE_MESSAGE. L’appelant doit obtenir des données supplémentaires auprès du tiers distant et appeler à nouveau la fonction.
Lorsque les mémoires tampons d’entrée contiennent trop d’informations, Schannel ne traite pas cela comme une erreur. La fonction traite autant d’entrée que possible et retourne le code d’état de cette activité de traitement. En outre, Schannel indique la présence d’informations non traitées dans les mémoires tampons d’entrée en retournant une mémoire tampon de sortie de type SECBUFFER_EXTRA. Le test des mémoires tampons de sortie pour ce type de mémoire tampon est la seule façon de détecter cette situation. Le champ cbBuffer de la structure de mémoire tampon supplémentaire indique le nombre d’octets d’entrée qui n’ont pas été traités.
Note
Le champ pvBuffer de la mémoire tampon supplémentaire ne contient pas de copie des données excédentaires.
Si vous recevez une mémoire tampon supplémentaire d’une fonction SSPI, vous devez supprimer les informations déjà traitées de la mémoire tampon d’entrée et appeler à nouveau la fonction. Schannel peut, et souvent, retourner uniquement la mémoire tampon supplémentaire et rien d’autre dans les mémoires tampons de sortie.