Partilhar via


Provedores de Serviços de Segurança

A SSPI (Interface do Provedor de Serviços de Segurança) fornece uma interface universal e padrão do setor para aplicativos distribuídos seguros. A API de Grafo de Pares fornece uma maneira de os aplicativos protegerem links em um grafo especificando um Provedor de Serviços de Segurança (SSP), que é uma DLL que implementa uma interface SSPI. Um aplicativo especifica um SSP quando cria um grafo usando PeerGraphCreate.

Para obter mais informações sobre como criar seu próprio SSP, consulte o link de documentação do SSPI na lista de Links de Referência do Graphing.

Considerações sobre programação para implementar um SSP

Tenha cuidado ao chamar um aplicativo de dentro de um SSP. As seguintes considerações se aplicam a retornos de chamada SSP:

  • Os retornos de chamada não devem demorar muito para retornar, pois são chamados durante a negociação de conexão. Se demorar muito para que uma conexão seja estabelecida, a conexão poderá ser descartada.
  • A API de Grafo de Pares ajusta dinamicamente os valores de tempo limite de conexão, com base na carga real de um sistema. O menor valor de tempo limite é 20 segundos.
  • Para evitar possíveis situações de deadlock, um aplicativo não deve acessar o banco de dados de grafo par de um retorno de chamada. Se um aplicativo exigir informações do banco de dados de grafo, o aplicativo poderá armazenar em cache as informações necessárias e, em seguida, consultar o cache de dentro do retorno de chamada. O cache também pode ajudar a diminuir o tempo de conexão.

Ao chamar os pontos de entrada SSPI, a Infraestrutura de Grafo de Pares requer valores específicos para parâmetros específicos de cinco (5) funções. Você não pode alterar esses valores de parâmetro fornecidos para SSP e o SSP pode ignorar os valores dos cinco parâmetros ou manimensá-los normalmente. A lista a seguir identifica esses parâmetros específicos e os valores necessários:

  • Acquirecredentialshandle

    Especifique um (1) para o parâmetro pvGetKeyArgument . Especifica NULL para os parâmetros pszPrincipal, pvLogonID e pGetKeyFn .

  • Initializesecuritycontext

    Especifique os seguintes sinalizadores para o parâmetro fContextReq : ISC_REQ_MUTUAL_AUTH | ISC_REQ_CONFIDENTIALITY | ISC_REQ_INTEGRITY | ISC_REQ_SEQUENCE_DETECT | ISC_REQ_STREAM | ISC_REQ_ALLOCATE_MEMORY.

  • Acceptsecuritycontext

    Especifique os seguintes sinalizadores para o parâmetro fContextReq : ASC_REQ_MUTUAL_AUTH | ASC_REQ_CONFIDENTIALITY | ASC_REQ_INTEGRITY | ASC_REQ_SEQUENCE_DETECT | ASC_REQ_STREAM | ASC_REQ_ALLOCATE_MEMORY.

  • Encryptmessage

    Especifique zero (0) para os parâmetros fQOP e MessageSeqNo .

  • Decryptmessage

    Especifique zero (0) para o parâmetro MessageSeqNo e NULL para o parâmetro pfQOP .

Ao chamar EncryptMessage, quatro buffers são passados na estrutura SecBufferDesc . A tabela a seguir identifica a ordem para passar os buffers.

Estrutura específica do SSP Descrição
SECBUFFER_STREAM_HEADER Contém os dados do cabeçalho de segurança. O tamanho do buffer de cabeçalho é obtido chamando QueryContextAttributes e especificando o atributo SECPKG_ATTR_STREAM_SIZES .
SECBUFFER_DATA Contém a mensagem de texto sem formatação a ser criptografada.
SECBUFFER_STREAM_TRAILER Contém os dados do trailer de segurança. O tamanho do buffer de cabeçalho é obtido chamando QueryContextAttributes e especificando o atributo SECPKG_ATTR_STREAM_SIZES .
SECBUFFER_EMPTY Não inicializado. O tamanho desse buffer é zero (0).

 

Ao chamar DecryptMessage, a API de Grafo de Pares passa exatamente quatro estruturas secBuffer . O primeiro buffer é SECBUFFER_DATA e contém uma mensagem criptografada. Os buffers restantes são usados para saída e são do tipo SECBUFFER_EMPTY.

O SSP precisa dar suporte à criptografia e descriptografia de buffers de dados do usuário com tamanhos de 16K e superiores em uma chamada.