makeSignature 函数 (sspi.h)
MakeSignature 函数生成消息的加密校验和,还包括防止消息丢失或插入的排序信息。 MakeSignature 允许应用程序在多种加密算法之间进行选择(如果所选机制支持)。 MakeSignature 函数使用上下文句柄引用的安全上下文。
Schannel 安全支持提供程序 (SSP) 不支持此函数。
语法
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY MakeSignature(
[in] PCtxtHandle phContext,
[in] unsigned long fQOP,
[in, out] PSecBufferDesc pMessage,
[in] unsigned long MessageSeqNo
);
参数
[in] phContext
用于对消息进行签名的安全上下文的句柄。
[in] fQOP
指示保护质量的包特定标志。 安全包可以使用此参数来启用加密算法的选择。
使用摘要 SSP 时,此参数必须设置为零。
[in, out] pMessage
指向 SecBufferDesc 结构的指针。 输入时, 结构引用包含要签名的消息的一个或多个 SecBuffer 结构。 函数不处理具有 SECBUFFER_READONLY_WITH_CHECKSUM 属性的缓冲区。
SecBufferDesc 结构还引用接收签名SECBUFFER_TOKEN类型的 SecBuffer 结构。
将摘要 SSP 用作 HTTP 身份验证协议时,应按如下所示配置缓冲区。
Buffer #/buffer type | 含义 |
---|---|
|
空白。 |
|
方法。 |
|
Url。 |
|
HEntity。 有关详细信息,请参阅 摘要质询响应的输入缓冲区。 |
|
空白。 接收 签名。 |
将摘要 SSP 用作 SASL 机制时,应按如下所示配置缓冲区。
Buffer #/buffer type | 含义 |
---|---|
|
空白。 接收签名。 此缓冲区必须足够大,以容纳可能的最大签名。 通过调用 QueryContextAttributes (General) 函数并指定SECPKG_ATTR_SIZES来确定所需的大小。 检查返回 SecPkgContext_Sizes 结构成员 cbMaxSignature。 |
|
要签名的消息。 |
|
空白。 |
[in] MessageSeqNo
传输应用程序分配给消息的序列号。 如果传输应用程序不保留序列号,则此参数为零。
使用摘要 SSP 时,此参数必须设置为零。 摘要 SSP 在内部管理序列号。
返回值
如果函数成功,该函数将返回SEC_E_OK。
如果该函数失败,它将返回以下错误代码之一。
返回代码 | 说明 |
---|---|
|
远程方需要新的握手序列,或者应用程序刚刚启动关闭。 返回到协商循环并再次调用 AcceptSecurityContext (General) 或 InitializeSecurityContext (General) 。 在第一次调用中传递空的输入缓冲区。 |
|
phContext 指定的上下文句柄无效。 |
|
pMessage 不包含有效的SECBUFFER_TOKEN缓冲区或包含的缓冲区太少。 |
|
nonce 计数不符合顺序。 |
|
必须重新验证 phContext) (安全上下文。 |
|
nonce 计数不是数值。 |
|
客户端和服务器之间协商的保护质量不包括 完整性 检查。 |
注解
MakeSignature 函数生成基于上下文的消息和会话密钥的签名。
VerifySignature 函数验证由 MakeSignature 函数签名的消息。
如果传输应用程序创建了安全上下文以支持序列检测,并且调用方提供了序列号,则函数在签名中包括此信息。 这可以防止消息的回复、插入和抑制。 安全包包含从传输应用程序向下传递的序列号。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | sspi.h (包括 Security.h) |
Library | Secur32.lib |
DLL | Secur32.dll |