Sicherheitsdienstanbieter
Die Security Service Provider Interface (SSPI) bietet eine universelle Schnittstelle nach Branchenstandard für sichere verteilte Anwendungen. Die Peer Graphing-API bietet Anwendungen die Möglichkeit, Links in einem Diagramm zu schützen, indem sie einen Security Service Provider (SSP) angeben, bei dem es sich um eine DLL handelt, die eine SSPI-Schnittstelle implementiert. Eine Anwendung gibt einen SSP an, wenn sie mithilfe von PeerGraphCreate ein Diagramm erstellt.
Weitere Informationen zum Erstellen eines eigenen SSP finden Sie im SSPI-Dokumentationslink in der Liste der Diagrammreferenzlinks.
Programmierüberlegungen für die Implementierung eines SSP
Gehen Sie beim Aufrufen einer Anwendung aus einem SSP vorsichtig vor. Die folgenden Überlegungen gelten für SSP-Rückrufe:
- Rückrufe sollten nicht lange dauern, bis sie zurückgegeben werden, da sie während der Verbindungsverhandlung aufgerufen werden. Wenn es zu lange dauert, bis eine Verbindung hergestellt wird, kann die Verbindung gelöscht werden.
- Die Peer graphing-API passt die Werte für das Verbindungstimeout dynamisch an, basierend auf der tatsächlichen Auslastung eines Systems. Der niedrigste Timeoutwert beträgt 20 Sekunden.
- Um potenzielle Deadlocksituationen zu vermeiden, darf eine Anwendung nicht über einen Rückruf auf die Peergraphingdatenbank zugreifen. Wenn eine Anwendung Informationen aus der Graphingdatenbank benötigt, kann die Anwendung die erforderlichen Informationen zwischenspeichern und dann innerhalb des Rückrufs auf den Cache verweisen. Das Zwischenspeichern kann auch dazu beitragen, die Verbindungszeit zu verkürzen.
Beim Aufrufen der SSPI-Einstiegspunkte erfordert die Peer graphing Infrastructure bestimmte Werte für bestimmte Parameter von fünf (5) Funktionen. Sie können diese für SSP bereitgestellten Parameterwerte nicht ändern, und der SSP kann die Werte für die fünf Parameter entweder ignorieren oder sie ordnungsgemäß behandeln. In der folgenden Liste werden diese spezifischen Parameter und erforderlichen Werte identifiziert:
-
Geben Sie einen (1) für den parameter pvGetKeyArgument an. Gibt NULL für die Parameter pszPrincipal, pvLogonID und pGetKeyFn an.
-
Geben Sie die folgenden Flags für den Parameter fContextReq an: ISC_REQ_MUTUAL_AUTH | ISC_REQ_CONFIDENTIALITY | ISC_REQ_INTEGRITY | ISC_REQ_SEQUENCE_DETECT | ISC_REQ_STREAM | ISC_REQ_ALLOCATE_MEMORY.
-
Geben Sie die folgenden Flags für den Parameter fContextReq an: ASC_REQ_MUTUAL_AUTH | ASC_REQ_CONFIDENTIALITY | ASC_REQ_INTEGRITY | ASC_REQ_SEQUENCE_DETECT | ASC_REQ_STREAM | ASC_REQ_ALLOCATE_MEMORY.
-
Geben Sie null (0) für die Parameter fQOP und MessageSeqNo an.
-
Geben Sie null (0) für den MessageSeqNo-Parameter und NULL für den pfQOP-Parameter an.
Beim Aufrufen von EncryptMessage werden vier Puffer in der SecBufferDesc-Struktur übergeben. In der folgenden Tabelle wird die Reihenfolge angegeben, in der die Puffer übergeben werden sollen.
SSP-spezifische Struktur | BESCHREIBUNG |
---|---|
SECBUFFER_STREAM_HEADER | Enthält die Sicherheitsheaderdaten. Die Größe des Headerpuffers wird abgerufen, indem QueryContextAttributes aufgerufen und das attribut SECPKG_ATTR_STREAM_SIZES angegeben wird. |
SECBUFFER_DATA | Enthält die zu verschlüsselnde Nur-Text-Nachricht. |
SECBUFFER_STREAM_TRAILER | Enthält die Sicherheitsanhängerdaten. Die Größe des Headerpuffers wird abgerufen, indem QueryContextAttributes aufgerufen und das attribut SECPKG_ATTR_STREAM_SIZES angegeben wird. |
SECBUFFER_EMPTY | Nicht initialisiert. Die Größe dieses Puffers ist null (0). |
Beim Aufrufen von DecryptMessage übergibt die Peergraphing-API genau vier SecBuffer-Strukturen . Der erste Puffer ist SECBUFFER_DATA und enthält eine verschlüsselte Nachricht. Die restlichen Puffer werden für die Ausgabe verwendet und sind vom Typ SECBUFFER_EMPTY.
Der SSP muss das Verschlüsseln und Entschlüsseln von Benutzerdatenpuffern mit einer Größe von 16 KB und mehr in einem Aufruf unterstützen.