SSPI 函数
SSPI 允许应用程序开发人员使用多个 SSP 中的一个,而不必了解安全性协议的细节。
下表列出了 Windows CE 3.0 支持的 SSPI 函数。
“凭据管理函数”提供对主控者的凭据的访问。主控者是一个操作系统能识别的实体,可以是用户或进程。主控者使用凭据建立用户或应用程序的标识。
| 函数 |
说明 |
| AcquireCredentialsHandle |
使应用程序能够获取凭据的句柄。 |
| FreeCredentialsHandle |
释放凭据句柄和所有相关资源。 |
| QueryCredentialsAttributes |
检索凭据属性。 |
“上下文管理函数”允许应用程序创建和使用安全上下文。安全上下文是与连接相关的安全数据,并且包含诸如会话密钥和会话持续时间等数据。客户端和服务器必须合作,来共同创建安全上下文。
| 函数 |
说明 |
| InitializeSecurityContext |
通过生成可以传递给服务器或远程对等终端的令牌来初始化安全上下文。 |
| AcceptSecurityContext |
使用重定向器验证凭据来建立安全上下文。 |
| DeleteSecurityContext |
释放安全上下文,并删除与之相关联的本地数据结构。 |
| QueryContextAttributes |
检索安全上下文的属性。 |
| ApplyControlToken |
在现有的安全上下文中应用附加的安全性消息。 |
| FreeContextBuffer |
释放由安全性提供者分配的内存缓冲区。 |
“消息支持函数”在安全连接上交换消息时,使用安全上下文以确保消息的完整性和保密性。通过消息签名和签名验证来保证消息的完整性。通过加密和解密保证消息的保密性。
| 函数 |
说明 |
| MakeSignature |
生成消息的加密校验和,并且包含有序的数据,以防止消息丢失或误插。此函数还允许应用程序选择不同的加密算法。 |
| VerifySignature |
验证消息签名。 |
“包管理函数”为所支持的各种安全包提供服务。
| 函数 |
说明 |
| EnumerateSecurityPackages |
列举可用的安全包及其功能。 |
| QuerySecurityPackageInfo |
检索指定的包的信息。 |
用户身份验证和 DCOM 安全性
在客户端/服务器应用程序中,Windows CE 3.0 使用 Windows NT LAN Manager 安全性支持提供者 (NTLMSSP.dll) 进行用户身份验证。客户端应用程序向 NTLMSSP 提供用户名、域名和密码,服务器和客户端应用程序交换令牌以完成身份验证。
在 Windows CE 上运行的服务器应用程序也可以充分利用 Windows NT LAN Manager 安全包。例如,如果选择了 RPC_C_AUTHN_WINNT 标志,分布式组件对象模型 (DCOM) 将使用 Windows NT LAN Manager 协议来建立用户凭据。
虽然 Windows CE 与 Windows NT 的身份验证类似,但两者之间还是有显著的差别。在 Windows NT 中,每当客户端与服务器建立连接、客户端呼叫或者客户端与服务器交换数据时,都要进行身份验证;也可以禁用身份验证功能。Windows NT 支持模拟,也就是允许对象获取已通过身份验证的用户或客户端的安全凭据,而 Windows CE 不支持此功能。在 Windows CE 中,仅在连接层 (RPC_C_AUTH_LEVEL_CONNECT) 进行身份验证。在连接层,当客户端首次呼叫服务器时,DCOM 进行身份检查,但在随后的呼叫中不再进行身份验证。Windows CE 上的 DCOM 对象可以在任何身份验证级别发起呼叫,但是不会出现身份验证级别高于 CONNECT 的呼入请求。此外,可以禁用 Windows CE 的身份验证 (RPC_C_AUTHN_LEVEL_NONE)。
身份验证成功之后,要根据访问列表执行访问检查,访问列表标识可以在系统中启动类的主控者。在服务器初始化期间,根据 DefaultAccessPermissions 注册表设置创建该列表,或者编写程序用 DCOMAccessControl 对象来提供列表。
当 Windows CE 客户端通过网络连接到 Windows NT 域控制器(管理安全凭据)时,可以进行正常的身份验证。但在移动环境中,Windows NT 域控制器并非总是可用的,或者网络不是基于 Windows NT 的,在这样的情况下,您可以创建用户名和密码的本地数据库,以便 Windows NT LAN Manager 安全包使用这些信息验证凭据。Windows CE 提供下列 API 来创建和管理这些本地安全数据库:
- NTLMEnumUser 为数据库的给定索引返回已注册的用户名。
- NTLMSetUserInfo 在数据库中创建一个用户(如果不存在),并更改该条目中的信息。
- NTLMDeleterUser 从数据库中删除用户。