Contesti di flusso
I contesti di flusso gestiscono i protocolli protetti orientati al flusso, ad esempio SSL o PCT. Nell'interesse della condivisione della stessa interfaccia e della 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 ai flussi, pacchetti di sicurezza che supportano i contesti di flusso presentano le caratteristiche di 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 del flusso impostando i flag ISC_REQ_STREAM e ASC_REQ_STREAM nelle chiamate alle funzioniInitializeSecurityContext (Generale) e AcceptSecurityContext (Generale).
L'applicazione chiama la funzione diQueryContextAttributes (Generale)con una struttura SecPkgContext_StreamSizes per eseguire una 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 di 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 un elenco di buffer. Quando un messaggio viene ricevuto da un canale orientato al flusso (ad esempio una porta TCP), il chiamante passa un elenco di buffer come indicato di seguito.
Buffer Lunghezza 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 sull'BLOB. Se la funzione viene restituita correttamente, l'elenco di buffer sarà simile al seguente.
Buffer Lunghezza Tipo di buffer 1 Lunghezza intestazione SECBUFFER_STREAM_HEADER 2 Lunghezza dati SECBUFFER_DATA 3 Lunghezza trailer SECBUFFER_STREAM_TRAILER 4 0 SECBUFFER_EMPTY 5 0 SECBUFFER_EMPTY Il pacchetto potrebbe anche avere restituito buffer n. 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. Viceversa, se la funzione messaggio restituisce il codice di errore SEC_E_INCOMPLETE_MESSAGE, l'elenco di buffer restituito sarà simile al seguente.
Buffer Lunghezza 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 elementi. Il chiamante può essere più efficiente fornendo un elenco di buffer come indicato di seguito.
Buffer Lunghezza Digitare 1 Lunghezza intestazione SECBUFFER_STREAM_HEADER 2 Lunghezza dati SECBUFFER_DATA 3 Lunghezza trailer SECBUFFER_STREAM_TRAILER In questo modo il chiamante può usare i buffer in modo più efficiente. Chiamando la funzioneQueryContextAttributesper determinare la quantità di spazio da riservare prima di chiamare MakeSignature, l'operazione è più efficiente per l'applicazione e il pacchetto di sicurezza.