Partager via


Contextes de flux

Les contextes de flux gèrent les protocoles sécurisés orientés flux tels que SSL ou PCT. Dans l’intérêt de partager la même interface et la gestion des informations d’identification similaires, SSPI prend en charge les contextes de flux. Le protocole de sécurité intègre le schéma d’authentification de flux et les formats d’enregistrement.

Pour fournir des protocoles orientés flux, packages de sécurité qui prennent en charge les contextes de flux présentent les caractéristiques de processus suivantes :

  • Le package définit l’indicateur SECPKG_FLAG_STREAM pour indiquer qu’il prend en charge la sémantique de flux.

  • Les applications de transport demandent la sémantique du flux en définissant les indicateurs ISC_REQ_STREAM et ASC_REQ_STREAM dans les appels aux fonctions InitializeSecurityContext (Général) et AcceptSecurityContext (Général).

  • L’application appelle la fonctionQueryContextAttributes (Général)avec une structure SecPkgContext_StreamSizes pour interroger le contexte de sécurité pour le nombre de mémoires tampons à fournir et les tailles à réserver pour les en-têtes ou les bandes-annonces.

  • L’application fournit des descripteurs de mémoire tampon à économiser pendant le traitement réel des données. En spécifiant la sémantique de flux, l’appelant indique la volonté d’effectuer un traitement supplémentaire afin que le package de sécurité puisse gérer le blocage des messages. En essence, pour les fonctions MakeSignature et VerifySignature, l’appelant passe dans une liste de mémoires tampons. Lorsqu’un message est reçu à partir d’un canal orienté flux (tel qu’un port TCP), l’appelant passe dans une liste de mémoires tampons comme suit.

    Tampon Longueur Type de mémoire tampon
    1 Longueur du message SECBUFFER_DATA
    2 0 SECBUFFER_EMPTY
    3 0 SECBUFFER_EMPTY
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    Le package de sécurité fonctionne ensuite sur leblob. Si la fonction retourne correctement, la liste de mémoires tampons ressemble à ce qui suit.

    Tampon Longueur Type de mémoire tampon
    1 Longueur de l’en-tête SECBUFFER_STREAM_HEADER
    2 Longueur des données SECBUFFER_DATA
    3 Longueur de la bande-annonce SECBUFFER_STREAM_TRAILER
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    Le package peut également avoir retourné la mémoire tampon n°4 avec la longueur x et le type de mémoire tampon SECBUFFER_EXTRA indiquant que les données de cette mémoire tampon font partie de l’enregistrement suivant et n’ont pas encore été traitées. À l’inverse, si la fonction de message retourne le code d’erreur SEC_E_INCOMPLETE_MESSAGE, la liste de mémoires tampons retournée se présente comme suit.

    Tampon Longueur Type de mémoire tampon
    1 x SECBUFFER_MISSING

     

    Cela indique que d’autres données ont été nécessaires pour traiter l’enregistrement. Contrairement à la plupart des erreurs retournées par une fonction de message, ce type de mémoire tampon n’indique pas que le contexte a été compromis. Au lieu de cela, il indique que d’autres données sont nécessaires. packages de sécurité ne doivent pas mettre à jour leur état de dans cette condition.

    De même, côté expéditeur de la communication, l’appelant peut appeler la fonction MakeSignature. Le package de sécurité peut avoir besoin de réallouer la mémoire tampon ou de copier des éléments autour. L’appelant peut être plus efficace en fournissant une liste de mémoires tampons comme suit.

    Tampon Longueur Type
    1 Longueur de l’en-tête SECBUFFER_STREAM_HEADER
    2 Longueur des données SECBUFFER_DATA
    3 Longueur de la bande-annonce SECBUFFER_STREAM_TRAILER

     

    Cela permet à l’appelant d’utiliser les mémoires tampons plus efficacement. En appelant la fonction QueryContextAttributes pour déterminer la quantité d’espace à réserver avant d’appeler MakeSignature, l’opération est plus efficace pour l’application et le package de sécurité.