Freigeben über


Streamkontexte

Streamkontexte behandeln die sicheren streamorientierten Protokolle wie SSL oder PCT. Um dieselbe Schnittstelle und ähnliche Anmeldeinformationen zu verwalten, bietet SSPI Unterstützung für Streamkontexte. Das Sicherheitsprotokoll enthält sowohl das Streamauthentifizierungsschema als auch das Datensatzformat.

Um streamorientierte Protokolle bereitzustellen, weisen Sicherheitspakete , die Streamkontexte unterstützen, die folgenden Prozessmerkmale auf:

  • Das Paket legt das SECPKG_FLAG_STREAM-Flag fest, um anzugeben, dass es Streamsemantik unterstützt.

  • Transportanwendungen fordern Streamsemantik an, indem die ISC_REQ_STREAM- und ASC_REQ_STREAM-Flags in den Aufrufen der Funktionen InitializeSecurityContext (Allgemein) und AcceptSecurityContext (Allgemein) festgelegt werden.

  • Die Anwendung ruft die QueryContextAttributes-Funktion (General) mit einer SecPkgContext_StreamSizes-Struktur auf, um den Sicherheitskontext nach der Anzahl der bereitzustellenden Puffer und den größen abzufragen, die für Header oder Trailer reserviert werden sollen.

  • Die Anwendung stellt Pufferdeskriptoren bereit, die während der eigentlichen Verarbeitung der Daten verwendet werden sollen. Durch Die Angabe der Streamsemantik gibt der Aufrufer die Bereitschaft an, zusätzliche Verarbeitung durchzuführen, damit das Sicherheitspaket die Blockierung der Nachrichten verarbeiten kann. Im Wesentlichen übergibt der Aufrufer für die Funktionen MakeSignature und VerifySignature eine Liste von Puffern. Wenn eine Nachricht von einem streamorientierten Kanal empfangen wird (z. B. ein TCP-Port), übergibt der Aufrufer eine Pufferliste wie folgt.

    Buffer Länge Puffertyp
    1 Nachrichtenlänge SECBUFFER_DATA
    2 0 SECBUFFER_EMPTY
    3 0 SECBUFFER_EMPTY
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    Das Sicherheitspaket funktioniert dann für das BLOB. Wenn die Funktion erfolgreich zurückgegeben wird, sieht die Pufferliste wie folgt aus.

    Buffer Länge Puffertyp
    1 Headerlänge SECBUFFER_STREAM_HEADER
    2 Datenlänge SECBUFFER_DATA
    3 Länge des Anhängers SECBUFFER_STREAM_TRAILER
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    Das Paket hätte auch den Puffer #4 mit der Länge x und dem Puffertyp SECBUFFER_EXTRA zurückgegeben, was angibt, dass die Daten in diesem Puffer Teil des nächsten Datensatzes sind und noch nicht verarbeitet wurden. Wenn die Nachrichtenfunktion dagegen den SEC_E_INCOMPLETE_MESSAGE Fehlercode zurückgibt, sieht die zurückgegebene Pufferliste wie folgt aus.

    Buffer Länge Puffertyp
    1 x SECBUFFER_MISSING

     

    Dies weist darauf hin, dass mehr Daten zum Verarbeiten des Datensatzes erforderlich sind. Im Gegensatz zu den meisten Fehlern, die von einer Nachrichtenfunktion zurückgegeben werden, gibt dieser Puffertyp nicht an, dass der Kontext kompromittiert wurde. Stattdessen wird darauf hingewiesen, dass mehr Daten benötigt werden. Sicherheitspakete dürfen ihren Zustand in dieser Bedingung nicht aktualisieren.

    Ebenso kann der Aufrufer auf der Absenderseite der Kommunikation die MakeSignature-Funktion aufrufen. Das Sicherheitspaket muss möglicherweise den Puffer neu zuweisungen oder Dinge kopieren. Der Aufrufer kann effizienter sein, indem eine Pufferliste wie folgt bereitgestellt wird.

    Buffer Länge type
    1 Headerlänge SECBUFFER_STREAM_HEADER
    2 Datenlänge SECBUFFER_DATA
    3 Länge des Anhängers SECBUFFER_STREAM_TRAILER

     

    Dadurch kann der Aufrufer die Puffer effizienter verwenden. Durch Aufrufen der QueryContextAttributes-Funktion , um den zu reservierenden Speicherplatz vor dem Aufruf von MakeSignature zu bestimmen, ist der Vorgang für die Anwendung und das Sicherheitspaket effizienter.