Partager via


Contextes de flux

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

Pour fournir des protocoles orientés flux, les packages de sécurité qui prennent en charge les contextes de flux ont 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.

  • Sémantique du flux des demandes d’applications de transport 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 fonction QueryContextAttributes (General) avec une structure SecPkgContext_StreamSizes pour interroger le contexte de sécurité du 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 à épargner pendant le traitement réel des données. En spécifiant la sémantique du flux, l’appelant indique qu’il est prêt à effectuer un traitement supplémentaire afin que le package de sécurité puisse gérer le blocage des messages. En substance, pour les fonctions MakeSignature et VerifySignature , l’appelant passe une liste de mémoires tampons. Lorsqu’un message est reçu d’un canal orienté flux (tel qu’un port TCP), l’appelant passe une liste de mémoires tampons comme suit.

    Buffer 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 l’objet BLOB. Si la fonction retourne correctement, la liste des mémoires tampons ressemble à ce qui suit.

    Buffer 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 a également pu retourner buffer #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.

    Buffer Longueur Type de mémoire tampon
    1 x SECBUFFER_MISSING

     

    Cela indique que davantage de 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, cela indique que davantage de données sont nécessaires. Les packages de sécurité ne doivent pas mettre à jour leur état 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. L’appelant peut être plus efficace en fournissant une liste de mémoires tampons comme suit.

    Buffer 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é.