Condividi tramite


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:

  • AcquireCredentialsHandle

    Specificare uno (1) per il parametro pvGetKeyArgument . Specifica NULL per i parametri pszPrincipal, pvLogonID e pGetKeyFn .

  • InitializeSecurityContext

    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.

  • AcceptSecurityContext

    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.

  • EncryptMessage

    Specificare zero (0) per i parametri fQOP e MessageSeqNo .

  • DecryptMessage

    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.