Provider di servizi di sicurezza
Security Service Provider Interface (SSPI) fornisce un'interfaccia universale standard del settore per le applicazioni distribuite sicure. L'API Peer Graphing consente alle applicazioni di proteggere i collegamenti in un grafo specificando un provider di servizi di sicurezza (SSP), ovvero una DLL che implementa un'interfaccia SSPI. Un'applicazione specifica un provider di servizi condivisi quando crea un grafo usando PeerGraphCreare.
Per altre informazioni sulla creazione di un provider di servizi condivisi personalizzato, vedere il collegamento alla documentazione di SSPI nell'elenco dei collegamenti di riferimento Graphing.
Considerazioni sulla programmazione per l'implementazione di un provider di servizi condivisi
Prestare attenzione quando si effettua una chiamata a un'applicazione dall'interno di un provider di servizi condivisi. Le considerazioni seguenti si applicano ai callback del provider di servizi condivisi:
- I callback non devono richiedere molto tempo perché vengono chiamati durante la negoziazione della connessione. Se è necessario troppo tempo per stabilire una connessione, la connessione può essere eliminata.
- L'API Peer Graphing regola dinamicamente i valori di timeout della connessione, in base al carico effettivo di un sistema. Il valore di timeout più basso è 20 secondi.
- Per evitare potenziali situazioni di deadlock, un'applicazione non deve accedere al database peer graphing da un callback. Se un'applicazione richiede informazioni dal database di grafo, l'applicazione può memorizzare nella cache le informazioni necessarie e quindi fare riferimento alla cache dall'interno del callback. La memorizzazione nella cache può anche contribuire a ridurre il tempo di connessione.
Quando si chiamano i punti di ingresso SSPI, l'infrastruttura peer graphing richiede valori specifici per parametri specifici di cinque (5) funzioni. Non è possibile modificare questi valori di parametro forniti in SSP e il provider di servizi condivisi può ignorare i valori per i cinque parametri o gestirli normalmente. L'elenco seguente identifica questi parametri specifici e i valori obbligatori:
-
Specificare uno (1) per il parametro pvGetKeyArgument. Specifica NULL per i parametri pszPrincipal, pvLogonIDe pGetKeyFn.
-
Specificare i flag seguenti per il parametro fContextReq: ISC_REQ_MUTUAL_AUTH | ISC_REQ_CONFIDENTIALITY | ISC_REQ_INTEGRITY | ISC_REQ_SEQUENCE_DETECT | ISC_REQ_STREAM | ISC_REQ_ALLOCATE_MEMORY.
-
Specificare i flag seguenti per il parametro fContextReq: ASC_REQ_MUTUAL_AUTH | ASC_REQ_CONFIDENTIALITY | ASC_REQ_INTEGRITY | ASC_REQ_SEQUENCE_DETECT | ASC_REQ_STREAM | ASC_REQ_ALLOCATE_MEMORY.
-
Specificare zero (0) per i parametri fQOP e MessageSeqNo.
-
Specificare zero (0) per il parametro MessageSeqNo e NULL per il parametro pfQOP.
Quando si chiama EncryptMessage, vengono passati quattro buffer nella struttura SecBufferDesc. La tabella seguente identifica l'ordine di passare i buffer.
Struttura specifica del provider di servizi condivisi | Descrizione |
---|---|
SECBUFFER_STREAM_HEADER | Contiene i dati dell'intestazione di sicurezza. La dimensione del buffer di intestazione viene ottenuta chiamando QueryContextAttributes e specificando l'attributo SECPKG_ATTR_STREAM_SIZES. |
SECBUFFER_DATA | Contiene il messaggio di testo normale da crittografare. |
SECBUFFER_STREAM_TRAILER | Contiene i dati del trailer di sicurezza. La dimensione del buffer di intestazione viene ottenuta chiamando QueryContextAttributes e specificando l'attributo SECPKG_ATTR_STREAM_SIZES. |
SECBUFFER_EMPTY | Non inizializzato. Le dimensioni di questo buffer sono pari a zero (0). |
Quando si chiama DecryptMessage, l'API Peer Graphing passa esattamente quattro strutture SecBuffer. Il primo buffer è SECBUFFER_DATAe contiene un messaggio crittografato. I buffer rimanenti vengono usati per l'output e sono di tipo SECBUFFER_EMPTY.
Il provider di servizi condivisi deve supportare la crittografia e la decrittografia dei buffer dei dati utente con dimensioni pari a 16.000 e superiori in una chiamata.