Partager via


Fournisseurs de services de sécurité

L’interface SSPI (Security Service Provider Interface) fournit une interface universelle et standard pour les applications distribuées sécurisées. L’API Peer Graphing permet aux applications de sécuriser les liens dans un graphique en spécifiant un fournisseur de services de sécurité (SSP), qui est une DLL qui implémente une interface SSPI. Une application spécifie un fournisseur de services partagés lorsqu’elle crée un graphique à l’aide de PeerGraphCreate.

Pour plus d’informations sur la création de votre propre fournisseur de services partagés, consultez le lien de la documentation SSPI dans la liste des liens de référence de graphing.

Considérations relatives à la programmation pour l’implémentation d’un fournisseur de services partagés

Utilisez la prudence lors de l’appel à une application à partir d’un fournisseur de services partagés. Les considérations suivantes s’appliquent aux rappels SSP :

  • Les rappels ne doivent pas prendre beaucoup de temps pour retourner, car ils sont appelés pendant la négociation de connexion. S’il faut trop de temps pour qu’une connexion soit établie, la connexion peut être supprimée.
  • L’API Peer Graphing ajuste dynamiquement les valeurs de délai d’expiration de connexion en fonction de la charge réelle d’un système. La valeur de délai d’expiration la plus basse est de 20 secondes.
  • Pour éviter les situations potentielles d’interblocage, une application ne doit pas accéder à la base de données de graphe homologue à partir d’un rappel. Si une application nécessite des informations à partir de la base de données de graphe, l’application peut mettre en cache les informations nécessaires, puis faire référence au cache à partir du rappel. La mise en cache peut également aider à réduire le temps de connexion.

Lors de l’appel des points d’entrée SSPI, l’infrastructure Peer Graphing nécessite des valeurs spécifiques pour des paramètres spécifiques de cinq (5) fonctions. Vous ne pouvez pas modifier ces valeurs de paramètre fournies en fournisseur de services partagés, et le fournisseur de services partagés peut ignorer les valeurs des cinq paramètres ou les gérer correctement. La liste suivante identifie ces paramètres spécifiques et les valeurs requises :

  • AcquireCredentialsHandle

    Spécifiez un (1) pour le paramètre pvGetKeyArgument. Spécifie NULL pour les paramètres pszPrincipal, pvLogonIDet pGetKeyFn.

  • initialiserSecurityContext

    Spécifiez les indicateurs suivants pour le paramètre fContextReq : ISC_REQ_MUTUAL_AUTH | ISC_REQ_CONFIDENTIALITY | ISC_REQ_INTEGRITY | ISC_REQ_SEQUENCE_DETECT | ISC_REQ_STREAM | ISC_REQ_ALLOCATE_MEMORY.

  • AcceptSecurityContext

    Spécifiez les indicateurs suivants pour le paramètre fContextReq : ASC_REQ_MUTUAL_AUTH | ASC_REQ_CONFIDENTIALITY | ASC_REQ_INTEGRITY | ASC_REQ_SEQUENCE_DETECT | ASC_REQ_STREAM | ASC_REQ_ALLOCATE_MEMORY.

  • EncryptMessage

    Spécifiez zéro (0) pour les paramètres fQOP et MessageSeqNo.

  • déchiffrer les DecryptMessage

    Spécifiez zéro (0) pour le paramètre MessageSeqNo et NULL pour le paramètre pfQOP.

Lorsque vous appelez EncryptMessage, quatre mémoires tampons sont passées dans la structure SecBufferDesc. Le tableau suivant identifie l’ordre de passage des mémoires tampons.

Structure spécifique au fournisseur de services partagés Description
SECBUFFER_STREAM_HEADER Contient les données d’en-tête de sécurité. La taille de la mémoire tampon d’en-tête est obtenue en appelant QueryContextAttributes et en spécifiant l’attribut SECPKG_ATTR_STREAM_SIZES.
SECBUFFER_DATA Contient le message en texte brut à chiffrer.
SECBUFFER_STREAM_TRAILER Contient les données de bande-annonce de sécurité. La taille de la mémoire tampon d’en-tête est obtenue en appelant QueryContextAttributes et en spécifiant l’attribut SECPKG_ATTR_STREAM_SIZES.
SECBUFFER_EMPTY Non initialisé. La taille de cette mémoire tampon est égale à zéro (0).

 

Lorsque vous appelez DecryptMessage, l’API Peer Graphing passe exactement quatre structures SecBuffer. La première mémoire tampon est SECBUFFER_DATAet contient un message chiffré. Les mémoires tampons restantes sont utilisées pour la sortie et sont de type SECBUFFER_EMPTY.

Le fournisseur de services partagés doit prendre en charge le chiffrement et le déchiffrement des mémoires tampons de données utilisateur avec des tailles de 16 Ko et supérieures dans un seul appel.