Provider di servizi di sicurezza
Security Service Provider Interface (SSPI) fornisce un'interfaccia standard di settore universale per applicazioni distribuite sicure. L'API Peer Graphing consente alle applicazioni di proteggere i collegamenti in un grafico 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 PeerGraphCreate.
Per altre informazioni sulla creazione di un provider di servizi condivisi personalizzato, vedere il collegamento alla documentazione SSPI nell'elenco dei collegamenti di riferimento di Graphing.
Considerazioni sulla programmazione per l'implementazione di un provider di servizi condivisi
Prestare attenzione quando si chiama 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, è possibile eliminare la connessione.
- 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 del 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, pvLogonID e 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, nella struttura SecBufferDesc vengono passati quattro buffer. La tabella seguente identifica l'ordine in cui passare i buffer.
Struttura specifica del provider di servizi condivisi | Descrizione |
---|---|
SECBUFFER_STREAM_HEADER | Contiene i dati dell'intestazione di sicurezza. Le dimensioni del buffer di intestazione vengono ottenute 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. Le dimensioni del buffer di intestazione vengono ottenute chiamando QueryContextAttributes e specificando l'attributo SECPKG_ATTR_STREAM_SIZES . |
SECBUFFER_EMPTY | Non inizializzato. La dimensione di questo buffer è zero (0). |
Quando si chiama DecryptMessage, l'API Peer Graphing passa esattamente quattro strutture SecBuffer . Il primo buffer è SECBUFFER_DATA e 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 di 16 KB e superiori in una sola chiamata.