Streamkontexte
Streamkontexte verarbeiten die sicheren streamorientierten Protokolle wie SSL oder PCT. Im Interesse der Gemeinsamen Nutzung derselben Schnittstelle und ähnlicher Anmeldeinformationsverwaltung bietet SSPI Unterstützung für Streamkontexte. Das Sicherheitsprotokoll enthält sowohl das Datenstromauthentifizierungsschema als auch die Datensatzformate.
Um streamorientierte Protokolle bereitzustellen, weisen Sicherheitspakete, die Streamkontexte unterstützen, die folgende Prozessmerkmale aufweisen:
Das Paket legt das SECPKG_FLAG_STREAM Flag fest, um anzugeben, dass es Streamsemantik unterstützt.
Transportanwendungen fordern Streamsemantik an, indem sie die ISC_REQ_STREAM und ASC_REQ_STREAM Flags in den Aufrufen der InitializeSecurityContext (Allgemein) und AcceptSecurityContext (Allgemein) Funktionen festlegen.
Die Anwendung ruft die QueryContextAttributes (General)-Funktion mit einer SecPkgContext_StreamSizes Struktur auf, um den Sicherheitskontext abzufragen, für die Anzahl der bereitzustellenden Puffer und die Größe, die für Kopfzeilen oder Trailer reserviert werden sollen.
Die Anwendung stellt Pufferdeskriptoren bereit, die während der tatsächlichen Verarbeitung der Daten zu sparen sind. Durch angeben der Datenstromsemantik gibt der Aufrufer die Bereitschaft an, zusätzliche Verarbeitung durchzuführen, sodass das Sicherheitspaket die Blockierung der Nachrichten verarbeiten kann. Im Wesentlichen übergibt der Aufrufer für die MakeSignature- und VerifySignature- Funktionen eine Liste von Puffern. Wenn eine Nachricht von einem Kanal empfangen wird, der streamorientiert ist (z. B. einen TCP-Port), übergibt der Aufrufer wie folgt eine Pufferliste.
Puffer 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 auf dem BLOB-. Wenn die Funktion erfolgreich zurückgegeben wird, sieht die Pufferliste wie folgt aus.
Puffer Länge Puffertyp 1 Kopfzeilenlänge SECBUFFER_STREAM_HEADER 2 Datenlänge SECBUFFER_DATA 3 Länge des Trailers SECBUFFER_STREAM_TRAILER 4 0 SECBUFFER_EMPTY 5 0 SECBUFFER_EMPTY Das Paket könnte auch Puffer #4 mit Länge x und Puffertyp zurückgegeben haben, SECBUFFER_EXTRA angibt, dass die Daten in diesem Puffer Teil des nächsten Datensatzes sind und noch nicht verarbeitet wurden. Wenn die Meldungsfunktion hingegen den SEC_E_INCOMPLETE_MESSAGE Fehlercode zurückgibt, würde die zurückgegebene Pufferliste wie folgt aussehen.
Puffer Länge Puffertyp 1 x SECBUFFER_MISSING Dies weist darauf hin, dass mehr Daten zum Verarbeiten des Datensatzes benötigt wurden. 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 angegeben, 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. Möglicherweise muss das Sicherheitspaket den Puffer neu schieben oder Elemente kopieren. Der Aufrufer kann effizienter sein, indem eine Pufferliste wie folgt bereitgestellt wird.
Puffer Länge Art 1 Kopfzeilenlänge SECBUFFER_STREAM_HEADER 2 Datenlänge SECBUFFER_DATA 3 Länge des Trailers SECBUFFER_STREAM_TRAILER Dadurch kann der Aufrufer die Puffer effizienter verwenden. Durch Aufrufen der QueryContextAttributes--Funktion, um den zu reservierenden Speicherplatz zu bestimmen, bevor MakeSignature-aufgerufen wird, ist der Vorgang für die Anwendung und das Sicherheitspaket effizienter.