安全服务提供程序
安全服务提供商接口 (SSPI) 为安全的分布式应用程序提供通用的行业标准接口。 对等图形 API 通过指定安全服务提供程序 (SSP) (实现 SSPI 接口的 DLL),为应用程序提供了一种保护图形中的链接的方法。 应用程序在使用 PeerGraphCreate 创建图形时指定 SSP。
有关创建自己的 SSP 的详细信息,请参阅 绘图参考链接列表中的 SSPI 文档链接。
实现 SSP 的编程注意事项
从 SSP 内部调用应用程序时要小心。 以下注意事项适用于 SSP 回调:
- 回调应该不需要很长时间才能返回,因为它们是在连接协商期间调用的。 如果建立连接的时间过长,则可以删除该连接。
- 对等图形 API 根据系统的实际负载动态调整连接超时值。 最小超时值为 20 秒。
- 为了避免潜在的死锁情况,应用程序不得从回调访问对等图形数据库。 如果应用程序需要图形数据库中的信息,则应用程序可以缓存必要的信息,然后从回调中引用缓存。 缓存还有助于减少连接时间。
调用 SSPI 入口点时,对等图形基础结构需要 5 个 (5 个) 函数的特定参数的特定值。 不能更改提供给 SSP 的这些参数值,SSP 可以忽略五个参数的值,也可以正常处理它们。 以下列表标识了这些特定参数和所需值:
-
为 pvGetKeyArgument 参数指定一个 (1 个) 。 为 pszPrincipal、pvLogonID 和 pGetKeyFn 参数指定 NULL。
-
为 fContextReq 参数指定以下标志: ISC_REQ_MUTUAL_AUTH |ISC_REQ_CONFIDENTIALITY |ISC_REQ_INTEGRITY |ISC_REQ_SEQUENCE_DETECT |ISC_REQ_STREAM |ISC_REQ_ALLOCATE_MEMORY。
-
为 fContextReq 参数指定以下标志: ASC_REQ_MUTUAL_AUTH |ASC_REQ_CONFIDENTIALITY |ASC_REQ_INTEGRITY |ASC_REQ_SEQUENCE_DETECT |ASC_REQ_STREAM |ASC_REQ_ALLOCATE_MEMORY。
-
为 fQOP 和 MessageSeqNo 参数指定零 (0) 。
-
为 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 及更大的用户数据缓冲区。