Fournisseurs de services de sécurité
L’interface SSPI (Security Service Provider Interface) fournit une interface universelle 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 documentation SSPI dans la liste des liens de référence graphique.
Considérations relatives à la programmation pour l’implémentation d’un fournisseur de services partagés
Soyez prudent lorsque vous appelez une application à partir d’un fournisseur de services partagés. Les considérations suivantes s’appliquent aux rappels SSP :
- Le retour des rappels ne doit pas prendre beaucoup de temps, car ils sont appelés pendant la négociation de la connexion. Si l’établissement d’une connexion prend trop de temps, 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 faible est de 20 secondes.
- Pour éviter des situations d’interblocage potentielles, une application ne doit pas accéder à la base de données graphique d’homologue à partir d’un rappel. Si une application a besoin d’informations de la base de données de graphique, 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ètres fournies au 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 :
-
Spécifiez un (1) pour le paramètre pvGetKeyArgument . Spécifie NULL pour les paramètres pszPrincipal, pvLogonID et pGetKeyFn .
-
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.
-
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.
-
Spécifiez zéro (0) pour les paramètres fQOP et MessageSeqNo .
-
Spécifiez zéro (0) pour le paramètre MessageSeqNo et NULL pour le paramètre pfQOP .
Lors de l’appel de 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 la 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). |
Lors de l’appel de DecryptMessage, l’API Peer Graphing passe exactement quatre structures SecBuffer . La première mémoire tampon est SECBUFFER_DATA et 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 de tailles supérieures ou égales à 16 000 en un seul appel.