Proveedores de servicios de seguridad
La interfaz del proveedor de servicios de seguridad (SSPI) proporciona una interfaz universal estándar del sector para aplicaciones distribuidas seguras. Peer Graphing API proporciona una manera de que las aplicaciones protejan vínculos en un grafo especificando un proveedor de servicios de seguridad (SSP), que es un archivo DLL que implementa una interfaz SSPI. Una aplicación especifica un SSP cuando crea un grafo mediante PeerGraphCreate.
Para obtener más información sobre cómo crear su propio SSP, consulte el vínculo de documentación de SSPI en la lista de vínculos de referencia de Graphing.
Consideraciones de programación para implementar un SSP
Tenga cuidado al llamar a una aplicación desde un SSP. Las siguientes consideraciones se aplican a las devoluciones de llamada de SSP:
- Las devoluciones de llamada no deben tardar mucho tiempo en devolverse, ya que se les llama durante la negociación de la conexión. Si se tarda demasiado tiempo en establecerse una conexión, se puede quitar la conexión.
- Peer Graphing API ajusta dinámicamente los valores de tiempo de espera de conexión, en función de la carga real de un sistema. El valor de tiempo de espera más bajo es de 20 segundos.
- Para evitar posibles situaciones de interbloqueo, una aplicación no debe tener acceso a la base de datos de grafos del mismo nivel desde una devolución de llamada. Si una aplicación requiere información de la base de datos de grafos, la aplicación puede almacenar en caché la información necesaria y, a continuación, hacer referencia a la memoria caché desde la devolución de llamada. El almacenamiento en caché también puede ayudar a reducir el tiempo de conexión.
Al llamar a los puntos de entrada de SSPI, peer Graphing Infrastructure requiere valores específicos para parámetros específicos de cinco (5) funciones. No puede cambiar estos valores de parámetro proporcionados a SSP y el SSP puede omitir los valores de los cinco parámetros o controlarlos correctamente. En la lista siguiente se identifican estos parámetros específicos y los valores necesarios:
-
Especifique uno (1) para el parámetro pvGetKeyArgument . Especifica NULL para los parámetros pszPrincipal, pvLogonID y pGetKeyFn .
-
Especifique las marcas siguientes para el parámetro fContextReq : ISC_REQ_MUTUAL_AUTH | ISC_REQ_CONFIDENTIALITY | ISC_REQ_INTEGRITY | ISC_REQ_SEQUENCE_DETECT | ISC_REQ_STREAM | ISC_REQ_ALLOCATE_MEMORY.
-
Especifique las marcas siguientes para el parámetro fContextReq : ASC_REQ_MUTUAL_AUTH | ASC_REQ_CONFIDENTIALITY | ASC_REQ_INTEGRITY | ASC_REQ_SEQUENCE_DETECT | ASC_REQ_STREAM | ASC_REQ_ALLOCATE_MEMORY.
-
Especifique cero (0) para los parámetros fQOP y MessageSeqNo .
-
Especifique cero (0) para el parámetro MessageSeqNo y NULL para el parámetro pfQOP .
Al llamar a EncryptMessage, se pasan cuatro búferes en la estructura SecBufferDesc . En la tabla siguiente se identifica el orden de pasar los búferes.
Estructura específica de SSP | Descripción |
---|---|
SECBUFFER_STREAM_HEADER | Contiene los datos del encabezado de seguridad. El tamaño del búfer de encabezado se obtiene llamando a QueryContextAttributes y especificando el atributo SECPKG_ATTR_STREAM_SIZES . |
SECBUFFER_DATA | Contiene el mensaje de texto sin formato que se va a cifrar. |
SECBUFFER_STREAM_TRAILER | Contiene los datos del finalizador de seguridad. El tamaño del búfer de encabezado se obtiene llamando a QueryContextAttributes y especificando el atributo SECPKG_ATTR_STREAM_SIZES . |
SECBUFFER_EMPTY | No inicializado. El tamaño de este búfer es cero (0). |
Al llamar a DecryptMessage, Peer Graphing API pasa exactamente cuatro estructuras SecBuffer . El primer búfer es SECBUFFER_DATA y contiene un mensaje cifrado. Los búferes restantes se usan para la salida y son de tipo SECBUFFER_EMPTY.
El SSP debe admitir el cifrado y el descifrado de búferes de datos de usuario con tamaños de 16 000 y mayores en una llamada.