Condividi tramite


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:

  • AcquireCredentialsHandle

    Specificare uno (1) per il parametro pvGetKeyArgument. Specifica NULL per i parametri pszPrincipal, pvLogonIDe 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, 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.