安全服务提供程序

安全服务提供商接口 (SSPI) 为安全的分布式应用程序提供通用的行业标准接口。 对等图形 API 通过指定安全服务提供程序 (SSP) (实现 SSPI 接口的 DLL),为应用程序提供了一种保护图形中的链接的方法。 应用程序在使用 PeerGraphCreate 创建图形时指定 SSP。

有关创建自己的 SSP 的详细信息,请参阅 绘图参考链接列表中的 SSPI 文档链接。

实现 SSP 的编程注意事项

从 SSP 内部调用应用程序时要小心。 以下注意事项适用于 SSP 回调:

  • 回调应该不需要很长时间才能返回,因为它们是在连接协商期间调用的。 如果建立连接的时间过长,则可以删除该连接。
  • 对等图形 API 根据系统的实际负载动态调整连接超时值。 最小超时值为 20 秒。
  • 为了避免潜在的死锁情况,应用程序不得从回调访问对等图形数据库。 如果应用程序需要图形数据库中的信息,则应用程序可以缓存必要的信息,然后从回调中引用缓存。 缓存还有助于减少连接时间。

调用 SSPI 入口点时,对等图形基础结构需要 5 个 (5 个) 函数的特定参数的特定值。 不能更改提供给 SSP 的这些参数值,SSP 可以忽略五个参数的值,也可以正常处理它们。 以下列表标识了这些特定参数和所需值:

  • AcquireCredentialsHandle

    pvGetKeyArgument 参数指定一个 (1 个) 。 为 pszPrincipalpvLogonIDpGetKeyFn 参数指定 NULL

  • InitializeSecurityContext

    fContextReq 参数指定以下标志: ISC_REQ_MUTUAL_AUTH |ISC_REQ_CONFIDENTIALITY |ISC_REQ_INTEGRITY |ISC_REQ_SEQUENCE_DETECT |ISC_REQ_STREAM |ISC_REQ_ALLOCATE_MEMORY

  • AcceptSecurityContext

    fContextReq 参数指定以下标志: ASC_REQ_MUTUAL_AUTH |ASC_REQ_CONFIDENTIALITY |ASC_REQ_INTEGRITY |ASC_REQ_SEQUENCE_DETECT |ASC_REQ_STREAM |ASC_REQ_ALLOCATE_MEMORY

  • EncryptMessage

    fQOPMessageSeqNo 参数指定零 (0) 。

  • DecryptMessage

    MessageSeqNo 参数指定零 (0) ,为 pfQOP 参数指定 NULL

调用 EncryptMessage 时,会在 SecBufferDesc 结构中传递四个缓冲区。 下表标识了传递缓冲区的顺序。

SSP 特定的结构 说明
SECBUFFER_STREAM_HEADER 包含安全标头数据。 通过调用 QueryContextAttributes 并指定 SECPKG_ATTR_STREAM_SIZES 属性来获取标头缓冲区的大小。
SECBUFFER_DATA 包含要加密的纯文本消息。
SECBUFFER_STREAM_TRAILER 包含安全尾部数据。 通过调用 QueryContextAttributes 并指定 SECPKG_ATTR_STREAM_SIZES 属性来获取标头缓冲区的大小。
SECBUFFER_EMPTY 未初始化。 此缓冲区的大小为零 (0) 。

 

调用 DecryptMessage 时,对等图形 API 仅传递四个 SecBuffer 结构。 第一个缓冲区 SECBUFFER_DATA,并包含加密消息。 其余缓冲区用于输出,属于 SECBUFFER_EMPTY类型。

SSP 需要支持在一次调用中加密和解密大小为 16K 及更大的用户数据缓冲区。