Contesti di flusso

I contesti di flusso gestiscono i protocolli orientati al flusso sicuri, ad esempio SSL o PCT. Nell'interesse di condividere la stessa interfaccia e la gestione di credenziali simili, SSPI fornisce il supporto per i contesti di flusso. Il protocollo di sicurezza incorpora sia lo schema di autenticazione del flusso che i formati di record.

Per fornire protocolli orientati al flusso, i pacchetti di sicurezza che supportano i contesti di flusso presentano le caratteristiche del processo seguenti:

  • Il pacchetto imposta il flag SECPKG_FLAG_STREAM per indicare che supporta la semantica del flusso.

  • Le applicazioni di trasporto richiede la semantica di flusso impostando le funzioni ISC_REQ_STREAM e ASC_REQ_STREAM nelle chiamate alle funzioni InitializeSecurityContext (Generale) e AcceptSecurityContext (Generale).

  • L'applicazione chiama la funzione QueryContextAttributes (Generale) con una struttura SecPkgContext_StreamSizes per eseguire query sul contesto di sicurezza per il numero di buffer da fornire e le dimensioni da riservare per intestazioni o trailer.

  • L'applicazione fornisce descrittori buffer da risparmiare durante l'elaborazione effettiva dei dati. Specificando la semantica del flusso, il chiamante indica la disponibilità a eseguire un'elaborazione aggiuntiva in modo che il pacchetto di sicurezza possa gestire il blocco dei messaggi. In sostanza, per le funzioni MakeSignature e VerifySignature , il chiamante passa in un elenco di buffer. Quando un messaggio viene ricevuto da un canale orientato al flusso (ad esempio una porta TCP), il chiamante passa in un elenco di buffer come indicato di seguito.

    Buffer Length Tipo di buffer
    1 Lunghezza messaggio SECBUFFER_DATA
    2 0 SECBUFFER_EMPTY
    3 0 SECBUFFER_EMPTY
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    Il pacchetto di sicurezza funziona quindi nel BLOB. Se la funzione restituisce correttamente, l'elenco di buffer è simile al seguente.

    Buffer Length Tipo di buffer
    1 Lunghezza intestazione SECBUFFER_STREAM_HEADER
    2 Lunghezza dei dati SECBUFFER_DATA
    3 Lunghezza del trailer SECBUFFER_STREAM_TRAILER
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    Il pacchetto potrebbe anche avere restituito il buffer #4 con lunghezza x e tipo di buffer SECBUFFER_EXTRA che indica che i dati in questo buffer fanno parte del record successivo e non sono ancora stati elaborati. Al contrario, se la funzione messaggio restituisce il codice di errore SEC_E_INCOMPLETE_MESSAGE, l'elenco di buffer restituito sarà simile al seguente.

    Buffer Length Tipo di buffer
    1 x SECBUFFER_MISSING

     

    Ciò indica che sono stati necessari più dati per elaborare il record. A differenza della maggior parte degli errori restituiti da una funzione di messaggio, questo tipo di buffer non indica che il contesto è stato compromesso. Indica invece che sono necessari più dati. i pacchetti di sicurezza non devono aggiornare lo stato in questa condizione.

    Analogamente, sul lato mittente della comunicazione, il chiamante può chiamare la funzione MakeSignature . Il pacchetto di sicurezza potrebbe dover riallocare il buffer o copiare le cose in giro. Il chiamante può essere più efficiente fornendo un elenco di buffer come indicato di seguito.

    Buffer Length Tipo
    1 Lunghezza intestazione SECBUFFER_STREAM_HEADER
    2 Lunghezza dei dati SECBUFFER_DATA
    3 Lunghezza del trailer SECBUFFER_STREAM_TRAILER

     

    Ciò consente al chiamante di usare i buffer in modo più efficiente. Chiamando la funzione QueryContextAttributes per determinare la quantità di spazio da riservare prima di chiamare MakeSignature, l'operazione è più efficiente per l'applicazione e il pacchetto di sicurezza.